Ошибка Real Ajax Uploader: невозможно записать в файл

Я строю сайт, который требует возможность загружать большие файлы.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 и получить более доступную для записи среду, но если есть более простое решение, я бы предпочел пойти с этим.

Спасибо.

1 ответ

Прежде всего загрузите небольшой файл в каталог и проверьте, успешно ли он загружается или нет. Если успешно, чем искать 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

обновите все вышеперечисленные настройки в соответствии с вашими требованиями и после этого перезапустите сервер и повторите попытку.

Другие вопросы по тегам