PHP文件上传大文件错误的解决办法
[ 2010/02/06 01:25 | by selboo ]
默认的PHP配置文件对文件上传大小限制值较小,第一个设置的值便是upload_max_filesize,默认为2M,将其设置大一点。
允许上传的文件大了,对于大文件上传时间相应也就大了,默认的30秒脚本超时时间也显得小了,这就需要设置max_execution_time,将其默认值30(秒)改大点。
设置了这两项后有时候还会发现对于没有超过upload_max_filesize的大文件也上传不了,PHP也没有给出错误提示[1]。这是由于POST数据超过了最大POST数据值post_max_size,默认为8M,也设置大一点。
综上,修改ph
允许上传的文件大了,对于大文件上传时间相应也就大了,默认的30秒脚本超时时间也显得小了,这就需要设置max_execution_time,将其默认值30(秒)改大点。
设置了这两项后有时候还会发现对于没有超过upload_max_filesize的大文件也上传不了,PHP也没有给出错误提示[1]。这是由于POST数据超过了最大POST数据值post_max_size,默认为8M,也设置大一点。
综上,修改ph
PHP 大文件上传进度条实现
[ 2010/01/26 23:00 | by selboo ]
目前我知道的方法有两种,一种是使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc),另外一种方法是使用PECL扩展模块uploadprogress实现(http://pecl.php.net/package/uploadprogress) 我这里举两个分别实现的例子供参考,更灵活的应用根据自己需要来修改。
APC实现方法:
安装APC,参照官方文档安装,可以使用PECL模块安装方法快速简捷,这里不说明
配置php.ini,设置参数 apc.rfc1867=1 ,使APC支持上传进度条功能,在APC源码说明文档里面有说明
代码范例:
使用PECL模块安装方法安装该模块
php.ini里面设置 uploadprogress.file.filename_template = “/tmp/upd_%s.txt”
代码范例:
APC实现方法:
安装APC,参照官方文档安装,可以使用PECL模块安装方法快速简捷,这里不说明
配置php.ini,设置参数 apc.rfc1867=1 ,使APC支持上传进度条功能,在APC源码说明文档里面有说明
代码范例:
if ($_SERVER['REQUEST_METHOD'] == ‘POST‘) { //上传请求
$status = apc_fetch(‘upload_‘ . $_POST['APC_UPLOAD_PROGRESS']);
$status['done'] = 1;
echo json_encode($status); //输出给用户端页面里的ajax调用,相关文档请自己寻找
exit;
} elseif (isset($_GET['progress_key'])) { //读取上传进度
$status = apc_fetch(‘upload_‘.$_GET['progress_key']);
echo json_encode($status);
exit;
} else {
//其他代码,比如上传表单等
}
uploadprogress 模块实现方法:$status = apc_fetch(‘upload_‘ . $_POST['APC_UPLOAD_PROGRESS']);
$status['done'] = 1;
echo json_encode($status); //输出给用户端页面里的ajax调用,相关文档请自己寻找
exit;
} elseif (isset($_GET['progress_key'])) { //读取上传进度
$status = apc_fetch(‘upload_‘.$_GET['progress_key']);
echo json_encode($status);
exit;
} else {
//其他代码,比如上传表单等
}
使用PECL模块安装方法安装该模块
php.ini里面设置 uploadprogress.file.filename_template = “/tmp/upd_%s.txt”
代码范例:
if($_SERVER['REQUEST_METHOD']==‘POST‘) {
if (is_uploaded_file($_FILES['upfile']['tmp_name'])) {
$upload_dir = ‘your_path/‘;
$ext = strrchr($_FILES['video']['name'], ‘.‘);
$sessid = $_POST['UPLOAD_IDENTIFIER'] ;
$tmpfile = $upload_dir . $sessid;
$sessfile = $upload_dir . $sessid .$ext;
if (move_uploaded_file($_FILES['upfile']['tmp_name'],$tmpfile)) {
//上传成功
} else {
//上传失败
} else {
//上传错误
} elseif (!empty($_GET['sessid'])) {
header(“Expires: Mon, 26 Jul 1997 05:00:00 GMT“);
header(“Last-Modified: “ . gmdate(“D, d M Y H:i:s“) . “ GMT“);
header(“Cache-Control: no-store, no-cache, must-revalidate“);
header(“Cache-Control: post-check=0, pre-check=0“, false);
header(“Pragma: no-cache“);
header(“Content-Type:text/html;charset=UTF-8“);
$unique_id = $_GET['sessid'];
$uploadvalues = uploadprogress_get_info($unique_id);
if (is_array($uploadvalues)) {
echo json_encode($uploadvalues);
} else {
//读取进度失败,另外处理逻辑
}
} else {
//显示上传表单
}
if (is_uploaded_file($_FILES['upfile']['tmp_name'])) {
$upload_dir = ‘your_path/‘;
$ext = strrchr($_FILES['video']['name'], ‘.‘);
$sessid = $_POST['UPLOAD_IDENTIFIER'] ;
$tmpfile = $upload_dir . $sessid;
$sessfile = $upload_dir . $sessid .$ext;
if (move_uploaded_file($_FILES['upfile']['tmp_name'],$tmpfile)) {
//上传成功
} else {
//上传失败
} else {
//上传错误
} elseif (!empty($_GET['sessid'])) {
header(“Expires: Mon, 26 Jul 1997 05:00:00 GMT“);
header(“Last-Modified: “ . gmdate(“D, d M Y H:i:s“) . “ GMT“);
header(“Cache-Control: no-store, no-cache, must-revalidate“);
header(“Cache-Control: post-check=0, pre-check=0“, false);
header(“Pragma: no-cache“);
header(“Content-Type:text/html;charset=UTF-8“);
$unique_id = $_GET['sessid'];
$uploadvalues = uploadprogress_get_info($unique_id);
if (is_array($uploadvalues)) {
echo json_encode($uploadvalues);
} else {
//读取进度失败,另外处理逻辑
}
} else {
//显示上传表单
}
PHP性能分析工具XHProf
[ 2010/01/26 16:49 | by selboo ]
XHProf是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低,还可以用在生产环境中,也可以由程序开 关来控制是否进行profile。基于浏览器的性能分析用户界面能更容易查看,或是与同行们分享成果。也能绘制调用关系图。在数据收集阶段,它记录调用次 数的追踪和包容性的指标弧在动态callgraph的一个程序。它独有的数据计算的报告/后处理阶段。在数据收集时,XHProfd通过检测循环来处理递 归的函数调用,并通过给递归调用中每个深度的调用一个有用的命名来避开死循环。
XHProf的轻量级性质和汇聚功能,使得它非常适合用于收集“生产环境”的性能统计数据的统计。
一、编译安装XHProf
[root@localhost src]# wget http://pecl.php.net/get/xhprof-0.9.2.tgz
[root@localhost src]# tar zxf xhprof-0.9.2.tgz
[root@localhost src]# cd xhprof-0.9.2
[root@localhost xhprof-0.9.2]# cp -r xhprof_html xhprof_lib /var/www/html/
[root@localhost xhprof-0.9.2]# cd extension/
[root@localhost extension]# /usr/local/webserver/php/bin/phpize
[root@localhost extension]# ./configure –with-php-config=/usr/local/webserver/php/bin/php-config
二、配置 php.ini 文件
vi vi /usr/local/webserver/php/etc/php.ini 修改php.ini
OK 重启WEB服务器。为了更加清晰显示程序执行、调用结构,安装Graphviz。
三、安装Graphviz:
[root@localhost src]# wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
[root@localhost src]# tar zxf graphviz-2.24.0.tar.gz
[root@localhost graphviz-2.24.0]# cd graphviz-2.24.0
[root@localhost graphviz-2.24.0]# ./configure
[root@localhost graphviz-2.24.0]# make
[root@localhost graphviz-2.24.0# make install
四、应用XHProf
客户端能很灵活地保存他们从XHProf运行中得到的XHProf原始数据。用户界面层的XHProf提供了一个 iXHProfRuns接口(见xhprof_lib/utils/xhprof_runs.php ),客户端可以利用。这使得客户端能够告诉用户界面层,如何获取XHProf运行后产生的对应数据。
XHProf的UI 库自带的有一个基于文件的iXHProfRUns接口实现,即“ XHProfRuns_Default”(见xhprof_lib/utils/xhprof_runs.php)。这个自带的实现将XHProf运行结 果存在ini配置的xhprof.output_dir参数指定的某个目录下。
一次XHProf运行,必须用一个命名空间和运行编号来唯一确定。
假设使用iXHProfRuns接口的XHProfRuns_Default这个默认实现方式,如:
//xhprofStart.php 文件
//xhprofEnd.php 文件
程序中应用:
将profile开关程序放在你所要进行分析的程序部分,就会将运行结果保存在xhprof.output_dir ini参数指定的特定目录下。文件的名称可能会是23dffaa3a3f66.xhprof_foo类似的文件; 两部分分别是运行编号(23dffaa3a3f6)和命名空间(xhprof_foo)。
最后,一些术语解释:
1. Inclusive Time (或子树时间):包括子函数所有执行时间。
2. Exclusive Time/Self Time:函数执行本身花费的时间,不包括子树执行时间。
3. Wall时间:花去了的时间或挂钟时间。
4. CPU时间:用户耗的时间+内核耗的时间
更多:http://mirror.facebook.net/facebook/xhprof/doc.html
XHProf的轻量级性质和汇聚功能,使得它非常适合用于收集“生产环境”的性能统计数据的统计。
一、编译安装XHProf
[root@localhost src]# wget http://pecl.php.net/get/xhprof-0.9.2.tgz
[root@localhost src]# tar zxf xhprof-0.9.2.tgz
[root@localhost src]# cd xhprof-0.9.2
[root@localhost xhprof-0.9.2]# cp -r xhprof_html xhprof_lib /var/www/html/
[root@localhost xhprof-0.9.2]# cd extension/
[root@localhost extension]# /usr/local/webserver/php/bin/phpize
[root@localhost extension]# ./configure –with-php-config=/usr/local/webserver/php/bin/php-config
二、配置 php.ini 文件
vi vi /usr/local/webserver/php/etc/php.ini 修改php.ini
[xhprof]
extension=xhprof.so
;
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
;
xhprof.output_dir=<directory_for_storing_xhprof_runs>
extension=xhprof.so
;
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
;
xhprof.output_dir=<directory_for_storing_xhprof_runs>
OK 重启WEB服务器。为了更加清晰显示程序执行、调用结构,安装Graphviz。
三、安装Graphviz:
[root@localhost src]# wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
[root@localhost src]# tar zxf graphviz-2.24.0.tar.gz
[root@localhost graphviz-2.24.0]# cd graphviz-2.24.0
[root@localhost graphviz-2.24.0]# ./configure
[root@localhost graphviz-2.24.0]# make
[root@localhost graphviz-2.24.0# make install
四、应用XHProf
客户端能很灵活地保存他们从XHProf运行中得到的XHProf原始数据。用户界面层的XHProf提供了一个 iXHProfRuns接口(见xhprof_lib/utils/xhprof_runs.php ),客户端可以利用。这使得客户端能够告诉用户界面层,如何获取XHProf运行后产生的对应数据。
XHProf的UI 库自带的有一个基于文件的iXHProfRUns接口实现,即“ XHProfRuns_Default”(见xhprof_lib/utils/xhprof_runs.php)。这个自带的实现将XHProf运行结 果存在ini配置的xhprof.output_dir参数指定的某个目录下。
一次XHProf运行,必须用一个命名空间和运行编号来唯一确定。
假设使用iXHProfRuns接口的XHProfRuns_Default这个默认实现方式,如:
//xhprofStart.php 文件
<?php
$XHPROF_DEBUG = FALSE;
$debugUserIDArray = array(
123456 => 1,
456152 => 1,
);
if (function_exists('xhprof_enable') && !empty($debugUserIDArray[$winduid]))
{
$XHPROF_DEBUG = TRUE;
}
if ($XHPROF_DEBUG)
{
include_once “/var/www/html/xhprof_lib/utils/xhprof_lib.php”;
include_once “/var/www/html/xhprof_lib/utils/xhprof_runs.php”;
xhprof_enable(); //start profiling
}
?>
$XHPROF_DEBUG = FALSE;
$debugUserIDArray = array(
123456 => 1,
456152 => 1,
);
if (function_exists('xhprof_enable') && !empty($debugUserIDArray[$winduid]))
{
$XHPROF_DEBUG = TRUE;
}
if ($XHPROF_DEBUG)
{
include_once “/var/www/html/xhprof_lib/utils/xhprof_lib.php”;
include_once “/var/www/html/xhprof_lib/utils/xhprof_runs.php”;
xhprof_enable(); //start profiling
}
?>
//xhprofEnd.php 文件
<?php
if (TRUE == $XHPROF_DEBUG)
{
//stop profiler
$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, “xhprof_foo”);
echo “—————\n”.
“<a href=’/xhprof_html/index.php?run=$run_id&source=xhprof_foo’>xhprof</a>\n”.
“—————\n”;
}
echo ‘<!– xhprof –>’;
?>
if (TRUE == $XHPROF_DEBUG)
{
//stop profiler
$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, “xhprof_foo”);
echo “—————\n”.
“<a href=’/xhprof_html/index.php?run=$run_id&source=xhprof_foo’>xhprof</a>\n”.
“—————\n”;
}
echo ‘<!– xhprof –>’;
?>
程序中应用:
include /var/www/html/xhprofStart.php
// run program
….
include /var/www/html/xhprofEnd.php
// run program
….
include /var/www/html/xhprofEnd.php
将profile开关程序放在你所要进行分析的程序部分,就会将运行结果保存在xhprof.output_dir ini参数指定的特定目录下。文件的名称可能会是23dffaa3a3f66.xhprof_foo类似的文件; 两部分分别是运行编号(23dffaa3a3f6)和命名空间(xhprof_foo)。
最后,一些术语解释:
1. Inclusive Time (或子树时间):包括子函数所有执行时间。
2. Exclusive Time/Self Time:函数执行本身花费的时间,不包括子树执行时间。
3. Wall时间:花去了的时间或挂钟时间。
4. CPU时间:用户耗的时间+内核耗的时间
更多:http://mirror.facebook.net/facebook/xhprof/doc.html
Php 配合 Shell 发送邮件
[ 2009/10/29 13:15 | by selboo ]
PHPMailer_v5.1.tar.gz
http://sourceforge.net/projects/phpmailer/
send.php
[code]#!/bin/php
<?php
require("PHPMailer_v5.1/class.phpmailer.php");
system("/home/ygcn/new/can/php/rs.sh"); //配置Shell 脚本
$mail = new PHPMailer();
$address = "收件人";
$mail->IsSMTP();
$mail->Host = "SNMP 服务器";
$mail->SMTPAuth = true;
$mail->Username = "发件人";
$mail->Password = "发
http://sourceforge.net/projects/phpmailer/
send.php
[code]#!/bin/php
<?php
require("PHPMailer_v5.1/class.phpmailer.php");
system("/home/ygcn/new/can/php/rs.sh"); //配置Shell 脚本
$mail = new PHPMailer();
$address = "收件人";
$mail->IsSMTP();
$mail->Host = "SNMP 服务器";
$mail->SMTPAuth = true;
$mail->Username = "发件人";
$mail->Password = "发
php的memcache模块的优化
[ 2009/07/28 15:14 | by selboo ]
memcache.allow_failover = 1
memcache.max_failover_attempts=20
memcache.chunk_size =8192
memcache.default_port = 11211
memcache.max_failover_attempts=20
memcache.chunk_size =8192
memcache.default_port = 11211
其中比较重要的是
memcache.chunk_size
一个整型值,用于控制数据传输的大小。默认值为 8192 字节 (8 KB),但是如果设置为 32768 (32 KB),则可以获得更好的性能。
memcache.allow_failover
一个布尔值,用于控制当连接出错时 Memcache 扩展是否故障转移到其他服务器上。默认值为 1 (true)。
memcache.max_failover_attempts
一个整型值,用于限制连接到持久性数据或检索数据的服务器数目。如果 memcache.allow_failover 为 false,则将忽略此参数。默认值为 20。
memcache.default_port
另一个整型值,用于设置连接到 Memcache 所使用的 TCP 端口。除非您修改它,否则默认值为无特权的高端口 11211。
对于访问量非常大的服务器,最好是通过socket来连接memcached,这样能减少打开和关闭tcp/ip链接的开销。
如果memcached和php在两台不同的服务器上,通过udp来连接应该比tcp连接能消耗小一些,并且能获得更好的速度(尚未测试)
在memcached中启用压缩,对于通过tcp/ip 或者udp连接的memcache,能减少传输数据的大小,也能相应的降低一些负载