当前位置:  编程技术>php
本页文章导读:
    ▪php生成zip压缩文件的实例详解      操作步骤: 1,下载zip.php工具类,解压,将文件放到相关目录,比如这里放加include目录中。 2,在php程序中,引入代码: <?php require_once "./include/zip.php"; $zip = new PHPZip(); //$zip -> createZi.........
    ▪php中ob_get_contents();ob_end_clean();ob_start();用法详解      php缓存相关函数: ob_get_contents(); ob_end_clean(); ob_start() 使用ob_start()把输出那同输出到缓冲区,而不是到浏览器。 然后用ob_get_contents得到缓冲区的数据。 ob_start()在服务器打开一个缓冲区来.........
    ▪php中mysql_fetch_assoc()和mysql_fetch_array()及mysql_fetch_row()、mysql_fetch_object()的区别      相同点:三个函数都是返回数据库中查询到的一行数据(即一条数据)。 不同点:mysql_fetch_assoc()用的是数据库中相应的字段名作为的key值(也就是数组下标)如:filed['id']=1; mysql_fetch_row()用.........

[1]php生成zip压缩文件的实例详解
    来源: 互联网  发布时间: 2013-12-24

操作步骤:
1,下载zip.php工具类,解压,将文件放到相关目录,比如这里放加include目录中。
2,在php程序中,引入代码:

<?php
require_once "./include/zip.php";
$zip = new PHPZip();
//$zip -> createZip("要压缩的文件夹目录地址", "压缩后的文件名.zip");   //只生成不自动下载
$zip -> downloadZip("要压缩的文件夹目录地址", "压缩后的文件名.zip"); //自动下载
?>

完整例子:

<?php
require_once "./include/zip.php";
if (!$download) {
exit();
}
set_time_limit(60);
$tmpManager = new TmpManager(); //假设有一个类来完成后面的操作
$tempfolder = array();
$tempfile = array(); //假设通过在页面上选择checkbox来下载已选的文件夹或文件,并一同打包
for($i = 0;$i < $checkboxnum;$i ) {
$value = ${"select".$i};
if ($value != ) {
$this_type = substr($value, 0, 1);
$this_id = substr($value, 1);
//将文件夹和文件的情况分开处理
if ($this_type == d) {
$tempfolder[] = $this_id;
}
elseif ($this_type == f) {

$tempfile[] = $this_id;
}
}
}
@mkdir($tempdir);
$curtempdir = "$tempdir/".$userid; //不同用户在不同的临时文件夹下操作
if (file_exists($curtempdir)) {
$tmpManager->DeleteDir($curtempdir); //删除旧的文件夹
}
if (sizeof($tempfolder) > 0 || sizeof($tempfile) > 0) {
mkdir($curtempdir, 0777); //如果有要打包的文件货文件夹,重新创建文件夹
}
if (sizeof($tempfile) > 0) {
$tmpManager->CopyFile($tempfile,$curtempdir); //将要下载的文件copy到创建的文件夹
}
if (sizeof($tempfolder) > 0) {
$tmpManager->CopyFolder($tempfolder,$curtempdir); //将要下载的文件夹copy到创建的文件夹
} //by www.
$zip = new PHPZip();
$zip -> downloadZip($curtempdir, "file_".date(Ymd).".zip");//打包并下载
?>

压缩类:

<?php
/*
File name: /include/zip.php
Author: Horace 2009/04/15
*/
class PHPZip{
var $dirInfo = array("0","0");
var $rootDir = ;
var $datasec = array();
var $ctrl_dir = array();
var $eof_ctrl_dir = "x50x4bx05x06x00x00x00x00";
var $old_offset = 0;
function downloadZip(){
        createZip($dir, $zipfilename, true);
}
function createZip($dir, $zipfilename, $autoDownload = false){
if (@function_exists(gzcompress)){
@set_time_limit("0");
if (is_array($dir)){
$fd = fopen ($dir, "r");

$fileValue = fread ($fd, filesize ($filename));
fclose ($fd);
if (is_array($dir)) $filename = basename($dir);
$this -> addFile($fileValue, "$filename");
}else{
$this->dirTree($dir,$dir);
}
$zipfilenametemp = time().$zipfilename;
$out = $this -> filezip();
$fp = fopen($zipfilenametemp, "w");
fwrite($fp, $out, strlen($out));
fclose($fp);
$filesize = filesize($zipfilenametemp);
if ($filesize < 104857600) {
if($autoDownload){
header("Content-type: application/octet-stream");
header("Content-disposition: attachment; filename=".$zipfilename);
}
echo $this -> filezip();
}else{
echo "create zip error!";
}
unlink($zipfilenametemp);
}
}
//get dir tree..

function dirTree($directory,$rootDir){
global $_SERVER,$dirInfo,$rootDir;
$fileDir=$rootDir;
$myDir=dir($directory);
while($file=$myDir->read()){


if(is_dir("$directory/$file") and $file!="." and $file!=".."){
$dirInfo[0] ;
$rootDir ="$fileDir$file/";
$this -> addFile(, "$rootDir");
//go on ns folders

$this->dirTree("$directory/$file",$rootDir);
}else{
if($file!="." and $file!=".."){
$dirInfo[1] ;
//$fd = fopen ("$directory/$file", "r");

$fileValue = file_get_contents("$directory/$file");
//fclose ($fd);

$this -> addFile($fileValue, "$fileDir$file");
}
}
}
$myDir->close();
}
function unix2DosTime($unixtime = 0) {
        $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
        if ($timearray[year] < 1980) {
        $timearray[year] = 1980;
        $timearray[mon] = 1;
        $timearray[mday] = 1;
        $timearray[hours] = 0;
        $timearray[minutes] = 0;
        $timearray[seconds] = 0;
} // end if

return (($timearray[year] - 1980) << 25) | ($timearray[mon] << 21) | ($timearray[mday] << 16) |
($timearray[hours] << 11) | ($timearray[minutes] << 5) | ($timearray[seconds] >> 1);
}
function addFile($data, $name, $time = 0){
$name = str_replace()(, /, $name);
$dtime = dechex($this->unix2DosTime($time));
$hexdtime = x . $dtime[6] . $dtime[7]
. x . $dtime[4] . $dtime[5]
. x . $dtime[2] . $dtime[3]
. x . $dtime[0] . $dtime[1];
eval($hexdtime = " . $hexdtime . ";);
$fr = "x50x4bx03x04";
$fr .= "x14x00"; // ver needed to extract
$fr .= "x00x00"; // gen purpose bit flag
$fr .= "x08x00"; // compression method
$fr .= $hexdtime; // last mod time and date
// "local file header" segment
$unc_len = strlen($data);
$crc = crc32($data);
$zdata = gzcompress($data);
$c_len = strlen($zdata);
$zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
$fr .= pack(V, $crc); // crc32
$fr .= pack(V, $c_len); // compressed filesize
$fr .= pack(V, $unc_len); // uncompressed filesize
$fr .= pack(v, strlen($name)); // length of filename
$fr .= pack(v, 0); // extra field length
$fr .= $name;
// "file data" segment
$fr .= $zdata;
// "data descriptor" segment (optional but necessary if archive is not
// served as file)
$fr .= pack(V, $crc); // crc32
$fr .= pack(V, $c_len); // compressed filesize
$fr .= pack(V, $unc_len); // uncompressed filesize
// add this entry to array
$this -> datasec[] = $fr;
$new_offset = strlen(implode(, $this->datasec));
// now add to central directory record
$cdrec = "x50x4bx01x02";
$cdrec .= "x00x00"; // version made by
$cdrec .= "x14x00"; // version needed to extract
$cdrec .= "x00x00"; // gen purpose bit flag
$cdrec .= "x08x00"; // compression method
$cdrec .= $hexdtime; // last mod time & date
$cdrec .= pack(V, $crc); // crc32
$cdrec .= pack(V, $c_len); // compressed filesize
$cdrec .= pack(V, $unc_len); // uncompressed filesize
$cdrec .= pack(v, strlen($name) ); // length of filename
$cdrec .= pack(v, 0 ); // extra field length
$cdrec .= pack(v, 0 ); // file comment length
$cdrec .= pack(v, 0 ); // disk number start
$cdrec .= pack(v, 0 ); // internal file attributes
$cdrec .= pack(V, 32 ); // external file attributes - archive bit set
$cdrec .= pack(V, $this -> old_offset ); // relative offset of local header
$this -> old_offset = $new_offset;
$cdrec .= $name;
// optional extra field, file comment
?>

    
[2]php中ob_get_contents();ob_end_clean();ob_start();用法详解
    来源: 互联网  发布时间: 2013-12-24

php缓存相关函数:
ob_get_contents();
ob_end_clean();
ob_start()

使用ob_start()把输出那同输出到缓冲区,而不是到浏览器。
然后用ob_get_contents得到缓冲区的数据。

ob_start()在服务器打开一个缓冲区来保存所有的输出。
因此,在任何时候使用echo ,输出都将被加入缓冲区中,直到程序运行结束或者使用ob_flush()来结束。
然后在服务器中缓冲区的内容才会发送到浏览器,由浏览器来解析显示。

函数ob_end_clean 会清除缓冲区的内容,并将缓冲区关闭,但不会输出内容。
此时得用一个函数ob_get_contents()在ob_end_clean()前面来获得缓冲区的内容。
这样的话,能将在执行ob_end_clean()前把内容保存到一个变量中,然后在ob_end_clean()后面对这个变量做操作。

例子:
 

<?php
ob_start(); // buf1
echo ' multiple ';
ob_start(); // buf2
echo ' buffers work ';
$buf2 = ob_get_contents();
ob_end_clean();
$buf1 = ob_get_contents();
ob_end_clean();

echo $buf1;
echo '<br/>';
echo $buf2;
?>

下面来看,ob_get_contents

(PHP 4, PHP 5)
ob_get_contents -- Return the contents of the output buffer
Description
string ob_get_contents ( void )

This will return the contents of the output buffer or FALSE, if output buffering isn't active.

See also ob_start() and ob_get_length().

if you use ob_start with a callback function as a parameter, and that function changes ob string (as in example in manual) don't expect that ob_get_contents will return changed ob.
it will work as you would use ob_start with no parameter at all. So don't be confused.
transfer image, another method (alternative to fsockopen or function socket) :

server(192.168.0.1)
makeimage.php
 

<?php
...........
...........
$nameimage="xxxx.jpg"
$comand=exec("plotvelocity.sh $nameimage $paramater1 $paramater2");
ob_start();
readfile($nameimage);
$image_data = ob_get_contents();
ob_end_clean();
echo $image_data;
unlink($nameimage);

Client (192.168.0.2)
$bild="images/newimage2.gif";
$host="192.168.0.1";
$url=file_get_contents("http://$host/makeimage.php?$querystring");
$fp = fopen("$bild", 'wb');
fwrite($fp, $url);
fclose($fp);
echo '<img src="'.$bild.'">';
?>

naturally you can transfer whichever thing and not only images

ob_get_clean

(PHP 4 >= 4.3.0, PHP 5)
ob_get_clean -- Get current buffer contents and delete current output buffer
Description
string ob_get_clean ( void )


This will return the contents of the output buffer and end output buffering. If output buffering isn't active then FALSE is returned. ob_get_clean() essentially executes both ob_get_contents() and ob_end_clean().

例1:
ob_get_clean()的简单示例
 

<?php

ob_start();

echo "Hello World";

$out = ob_get_clean();
$out = strtolower()($out);

var_dump($out);
?>

输出: string(11) "hello world"

例2,ob_start() and ob_get_contents().
Notice that the function beneath does not catch errors, so throw in an @ before those ob_* calls
Running PHP4 < 4.3.0, you can simply add the following to use the function anyway:
 

<?php
if (!function_exists("ob_get_clean")) {
function ob_get_clean() {
$ob_contents = ob_get_contents();
ob_end_clean();
return $ob_contents;
}
} //by www.
?>

    
[3]php中mysql_fetch_assoc()和mysql_fetch_array()及mysql_fetch_row()、mysql_fetch_object()的区别
    来源: 互联网  发布时间: 2013-12-24

相同点:三个函数都是返回数据库中查询到的一行数据(即一条数据)。
不同点:mysql_fetch_assoc()用的是数据库中相应的字段名作为的key值(也就是数组下标)如:filed['id']=1;

mysql_fetch_row()用的是自动生成的数字(从0开始依次生成)作为的key值(也就是数组下标)如:filed[0]=1;
mysql_fetch_array()用的是自动生成的数字(从0开始依次生成)作为的key值(也就是数组下标),而且它还同时生成数据库中相应的字段名作为的key值(也就是数组下标)。

如:filed[0]=1,filed['id']=1;
即mysql_fetch_array()将mysql_fetch_assoc()和mysql_fetch_row()查询到的结果合为一体。
mysql_fetch_object()与mysql_fetch_assoc()差不多。
只是mysql_fetch_assoc()返回的是数组。
mysql_fetch_object()返回的是object对象。

希望大家仔细体会上面的对比分析,以便于掌握它们的区别与具体应用场景。


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3