2014-01-07 3 views
0

Это прослушивало меня часами.

Я пишу приложение с angularjs и пытаюсь загрузить php-часть загрузки файла.

похоже, что скрипт php пытается скопировать файл из/tmp/randomuniquefilename в правильный каталог. Проблема в том, что я не хочу, чтобы она хранилась в моей корневой папке temp. Я изменил путь загрузки файла по умолчанию PHP.ini по умолчанию в папку/var/www/tmp// var/www/tmp/и имеет правильные разрешения.

Я хотел бы знать, как/где изменяется моя переменная $_FILES[ 'file' ][ 'tmp_name' ], поэтому я могу ее изменить. Я попробовал просто $_FILES[ 'file' ][ 'tmp_name' ] = '/var/www/tmp/', это не сработало для меня.

Моя ошибка PHP:

[Tue Jan 07 15:46:14 2014] [error] [client 127.0.0.1] PHP Warning: move_uploaded_file(/var/www/funandgames/jobernize/uploaded/bleg.png): failed to open stream: Permission denied in /var/www/funandgames/jobernize/uploaded/test.php on line 18, referer: http://127.0.0.1/funandgames/jobernize/

[Tue Jan 07 15:46:14 2014] [error] [client 127.0.0.1] PHP Warning: move_uploaded_file(): Unable to move '/tmp/phpbkz0xn' to '/var/www/funandgames/jobernize/uploaded/bleg.png' in /var/www/funandgames/jobernize/uploaded/test.php on line 18, referer: http://127.0.0.1/funandgames/jobernize/

Может быть, мои JS настройки, что вар, или это будет PHP?

Вот мой PHP:

<?php 

if (!empty($_FILES)) { 

    function varDumpToString ($var) 
    { 
     ob_start(); 
     var_dump($var); 
     $result = ob_get_clean(); 
     error_log($result); 
    } 

    varDumpToString($_FILES); 

    $tempPath = '/var/www' . $_FILES[ 'file' ][ 'tmp_name' ]; 
    $uploadPath = dirname(__FILE__) . '/' . $_FILES[ 'file' ][ 'name' ]; 

    error_log($tempPath); 

    move_uploaded_file($tempPath, $uploadPath); 

    $answer = array('answer' => 'File transfer completed'); 
    $json = json_encode($answer); 

    echo $json; 

} else { 

    echo 'No files'; 

} 

?> 

Я просто приложил/уаг/WWW на пути, и теперь я не получаю никаких ошибок, но ничего не происходит, файл не копируется.

Похоже, что временное имя включает/tmp/не только имя файла по какой-либо причине, это нормально?

+0

Вы перезапустили веб-сервер после внесения изменений в 'php.ini'?FYI, имя 'tmp_name' задано на стороне сервера, а ваша ошибка с разрешением разрешена * не имеет ничего общего с исходным файлом, но путь назначения – Phil

+0

да, да, и да, я знаю, спасибо, не обошел путь назначения, просто хотите получить правильный путь источника. – Melbourne2991

+0

Проверьте, что показывает 'phpinfo()' для параметра ['upload_tmp_dir'] (http://php.net/manual/ini.core.php#ini.upload-tmp-dir). Кроме того, 'tmp_name' будет содержать полный путь. Вы не префикс его ничего – Phil

ответ

1

Просто измените разрешение tmp_file_upload 755 Ниже командой CHMOD -R 755 tmp_file_upload

Это происходит потому, что images и tmp_file_upload могут быть перезаписаны только root пользователем. Для загрузки на работу нам необходимо сделать владельца этих папок таким же, как владелец процесса httpd, или сделать их доступными для всего мира (плохая практика).

  1. Проверьте владельца процесса apache: $ps aux | grep httpd. Первый столбец будет владелец, как правило, это будет nobody
  2. Изменить владельца images и tmp_file_upload быть стать nobody или любой владелец вы нашли в шаге 1.

    $sudo chown nobody /var/www/html/mysite/images/

    $sudo chown nobody /var/www/html/mysite/tmp_file_upload/

  3. Chmod images и tmp_file_upload теперь должны быть доступны для записи владельцем, при необходимости [Кажется, у вас уже есть это место]. Упоминается в @Dmitry Teplyakov ответ.

    $ sudo chmod -R 0755 /var/www/html/mysite/images/

    $ sudo chmod -R 0755 /var/www/html/mysite/tmp_file_upload/

  4. Для получения более подробной информации, почему это поведение СЛУЧИЛОСЬ, проверить ручной http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir, отметим, что он также говорить о open_basedir директивы.

+1

Все больше хостов запускают скрипты PHP в качестве обычного пользователя через suExec или аналогичный. Это безумие, чтобы автоматически предположить, что пользователь httpd требуется. – Phil

+0

Я проверил и не работает как никто, он работает как тот же пользователь, который имеет разрешения на все необходимые файлы – Melbourne2991

Смежные вопросы