我正在构建一个需要能够上传大型.wav文件的网站。我认为上传这些文件的最佳方式是通过jQuery插件将数据块化到服务器。我选择Real Ajax Uploader来执行此操作。
我将以下内容放在一起,它适用于较小的文件:
$('.demo').ajaxupload({
url : '/upload.php',
remotePath: '/remote/path/',
maxFiles: 1,
maxFileSize: '250M',
});
当我有一个涉及“分块”的较大文件时,会出现问题。由于某种原因,脚本不断给我这个错误:
Cannot write on file.
我已经将它追溯到upload.php文件中的这个位置:
...
//start of the file upload, first chunk
if ($currByte == 0) {
$tempFile = tempnam($this->tempPath, 'axupload');
$this->tempFileName = basename($tempFile);
}
// some rare times (on very very fast connection), file_put_contents will be unable to write on the file,
// so we try until it writes for a max of 5 times
$try = 5;
while (file_put_contents($tempFile, $fileChunk, FILE_APPEND) === false && $try > 0) {
usleep(50);
$try--;
}
//if the above fails then user cannot write file due to permission or other problems
if (!$try) {
$this->message(-1, 'Cannot write on file.');
}
...
我认为这意味着$tempFile
不可写,所以我添加了这一点:
...
//start of the file upload, first chunk
if ($currByte == 0) {
$tempFile = tempnam($this->tempPath, 'axupload');
$this->tempFileName = basename($tempFile);
}
chmod($tempFile, 0755);
...
我再次尝试了,我仍然遇到了问题,所以我将/ tmp的权限更改为755,可能就是这样。什么都没有。
我可以尝试只更改/ tmp目录的位置并拥有更可写的环境,但是如果有一个更简单的解决方案,我宁愿选择它。
谢谢。
答案 0 :(得分:0)
首先在目录中上传一个小文件,然后检查它是否成功上传。如果成功,则搜索php.ini
设置文件并检查以下内容:
php_value upload_max_filesize 10M
php_value post_max_size 10M
php_value max_input_time 300
php_value max_execution_time 300
更新以上所有设置以满足您的要求,然后重新启动服务器,然后重试。