【发布时间】:2011-04-22 13:22:25
【问题描述】:
我一直致力于为最初用 PHP 4.4.9 编写的网站添加功能。将网站移植到 PHP5 不在他们的预算之内,所以甚至不建议这样做。 (尽管它非常需要它)。我面临的问题是如何将二进制数据从 GET 请求复制到服务器上的文件位置。目前编写的支持该方法的代码如下:
function save($path) {
$input = fopen("php://input", "r");
$temp = tmpfile();
$realSize = stream_copy_to_stream($input, $temp);
fclose($input);
if ($realSize != $this->getSize()){
return false;
}
$target = fopen($path, "w");
fseek($temp, 0, SEEK_SET);
stream_copy_to_stream($temp, $target);
fclose($target);
}
我遇到的问题是函数stream_copy_to_stream 仅在 PHP 5 中受支持。这是我目前所拥有的,但它似乎只创建了 8K 大小的文件,我不确定为什么。理论上,它应该允许最多 20M。
function save($path) {
$input = fopen("php://input", "rb");
$temp = tmpfile();
fwrite($temp, fread($input, 20971520));
fclose($input);
$target = fopen($path, "w");
fseek($temp, 0, SEEK_SET);
#stream_copy_to_stream($temp, $target);
fwrite($target, fread($temp, 20971520));
fclose($target);
echo $path;
return true;
}
我删除了大小检查,因为我无法在阅读时找到获取文件大小的方法。非常感谢您对此的任何帮助。我已经绞尽脑汁好几个小时了,我知道那里有人,很可能是在 stackoverflow 上,可以很容易地回答我的问题。
提前感谢所有帮助!
另外,我正在通过 GET 提交数据以允许使用进度条等上传多个文件。
【问题讨论】:
标签: php ajax http file-upload php4