真正的Ajax上传错误:无法在文件上写入

问题描述:

我正在构建一个需要能够上传大型.wav文件的网站。我认为上传这些文件的最好方法是通过一个可以将数据分块到服务器的jQuery插件。我选择了Real Ajax Uploader来做到这一点。真正的Ajax上传错误:无法在文件上写入

我总结了以下和它的伟大工程,为更小的文件:当我有一个涉及“分块”较大的文件时

$('.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

你检查增加php.ini设置中的值,如upload_max_filesize和post_max_size –

+0

@ViswanathPolaki是的。我有两个在256M与-1内存限制。我的文件是80M。虽然分块的比例为3%。 –

首先在目录中上传一个小文件,并检查是否成功上传。如果成功的话,比搜索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 

更新上述所有设置,以满足您的要求,之后重新启动服务器,然后再试一次。