我正在使用带有uploadprogress扩展的php 5.3.2来使用zend框架在上传期间获取进度条。即使是zend提供的演示也无法正常工作。 zend示例中的代码 -
if (isset($_GET['uploadId'])) {
set_include_path(realpath(dirname(__FILE__) . '/../../../library')
. PATH_SEPARATOR . get_include_path());
require_once 'Zend/ProgressBar.php';
require_once 'Zend/ProgressBar/Adapter/JsPull.php';
require_once 'Zend/Session/Namespace.php';
$data = uploadprogress_get_info($_GET['uploadId']);
$bytesTotal = ($data === null ? 0 : $data['bytes_total']);
$bytesUploaded = ($data === null ? 0 : $data['bytes_uploaded']);
$adapter = new Zend_ProgressBar_Adapter_JsPull();
$progressBar = new Zend_ProgressBar($adapter, 0, $bytesTotal, 'uploadProgress');
if ($bytesTotal === $bytesUploaded) {
$progressBar->finish();
} else {
$progressBar->update($bytesUploaded);
}
}
uploadprogress_get_info始终返回null。我认为我的代码有问题,所以我下载了http://labs.liip.ch/uploadprogresssimple/index.php提供的工作样本,但即使在uploadprogress_get_info中,也总是返回null。
我的uploadprogress配置值
启用uploadprogress支持
版本1.0.1
uploadprogress.file.contents_template / tmp / upload_contents_%s
uploadprogress.file.filename_template /tmp/upt_%s.txt
uploadprogress.get_contents 1
在谷歌上搜索我发现uploadprogress扩展与Suhosin Patch < 0.9.26存在一些问题,但我使用的是Suhosin补丁0.9.9.1
答案 0 :(得分:1)
你在本地测试吗?我的意思是在localhost上测试这个?尝试上传到远程主机,或者测试一个相当大的文件(确保你之前碰到了upload_max_filesize
和post_max_size
。)
答案 1 :(得分:1)
在谷歌上搜索我发现uploadprogress扩展与Suhosin Patch&lt; 0.9.26但我正在使用Suhosin补丁0.9.9.1
我使用相同的Suhosin版本并遇到此问题。还尝试了apuc_fetch(),其中suhosin也瘫痪了。
多么愚蠢的补丁。要删除它,我必须重建PHP。为了f ***清酒!
答案 2 :(得分:1)
同样的问题,虽然我使用Zend_File_Transfer_Adapter来处理上传。它很有用,因为你也可以验证上传的文件:)
至少可以帮助您配置服务器的一些有用方法是:
Zend_File_Transfer_Adapter_Http::isApcAvailable();
Zend_File_Transfer_Adapter_Http::isUploadProgressAvailable();
答案 3 :(得分:0)
运行phpinfo以检查是否已安装UploadProgress且服务器上的tmp目录是否可写。含义&#34; uploadprogress.file.filename_template&#34;指的是phpinfo中正确的tmp文件夹。
您可以运行以下代码来检查uploadprogress是否可写。
&lt; div id =&#34; status&#34; style =&#34; border:1px black solid;&lt;?php
$ templateini = ini_get(&#34; uploadprogress.file.filename_template&#34;);
$ testid =&#34; thisisjustatest&#34;;
$ template = sprintf($ templateini,$ testid);
$ templateerror = false;
if($ template&amp;&amp; $ template!= $ templateini&amp;&amp; @touch($ template)&amp;&amp; file_exists($ template)){
// print&#39;(&#39;。$ templateini。&#39;是可写的。真实路径是&#39; .str_replace($ testid,&#34;%s&#34;,realpath($ template) ))。&#39;)&#39 ;;
取消链接($模板);
其他{
$ templateerror = true;
}
if(function_exists(&#34; uploadprogress_get_info&#34;)){
if($ templateerror){
print&#39; background-color:red;&#34;&#39;;
打印&#34;&gt;问题。 &#34 ;;
if($ template == $ templateini){
print&#34; uploadprogress.file.filename_template($ templateini)中没有%s用于制作唯一的临时文件。请调整。&lt; br /&gt;&#34;;
其他{
print&#34; $ templateini不可写。 &lt; br /&gt;请确保该目录存在且可写入Web服务器。 &LT峰; br /&GT;
或调整ini设置&#39; uploadprogress.file.filename_template&#39;到了正确的道路。&#34;;
}
其他{
打印背景颜色:绿色;&#34;&gt;安装uploadprogress扩展程序并初步检查显示一切正常&#39 ;;
}
其他{
?&GT;
background-color:red;&#34;&gt;未安装uploadprogress扩展名
&lt;?php}?&gt;
&LT; / DIV&GT;
如果上面的代码出错,请指向php.ini文件中正确的tmp目录。在windows localhost机器上的Xampp tmp目录的php.ini文件中添加了以下行。 uploadprogress.file.filename_template = C:\ xampp \ tmp \ some_name_%s.txt
现在运行它应该工作的Zend演示或运行以下代码来手动获取var_dump。 的var_dump(uploadprogress_get_info($ _ GET [&#39; UPLOADID&#39;]));