2012-06-05 2 views
1

Я использую move_uploaded_file() для загрузки изображений на сервер, однако он дает обычную ошибку:move_uploaded_file() дает ошибку Владелец/Группа

Warning: move_uploaded_file(upload/file.png) [function.move-uploaded-file]: 
failed to open stream: No such file or directory in 
/home/newuser/public_html/model/account.class.php on line 39 

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move  
'/tmp/phpuLkUgE' to 'upload/file.png' in  
/home/newuser/public_html/model/account.class.php on line 39 

Это не разрешение на основе, как я установил папка с 777 с корневым доступом и ls -l отображает ее правильно.

755 /home/newuser/public_html/model 
755 /home/newuser/public_html/model/account.class.php 
777 /home/newuser/public_html/upload 

PHP Line

move_uploaded_file($_FILES["photo"]["tmp_name"], "../upload/file.png"); 

Проблема я думаю, вплоть до настройки/Владелец группы сконфигурирован неправильно .. Некоторое время назад я имел все мои сайты, как поддомены в одном аккаунте:

/home/olduser/public_html/subdomains/index.html 

затем я изменил это и создал новую учетную запись пользователя для управления отдельного веб-сайта проще и только через переместили файлы ...

/home/olduser/public_html/subdomains 
/home/newuser/public_html/index.html 

Новые папки /home/newuser теперь принадлежат и сгруппированы newuser newuser, но я думаю, что PHP может быть запущен как nobody olduser так что это может быть причиной проблемы?

Что я могу исправить?

+0

Если вы получаете 'no такой файл или каталог', кажется, что временно загруженный файл вообще не существует, следовательно, не удалось загрузить, а не ошибка, фактически перемещающая файл. Отправьте свой PHP-код. –

+0

@Michael Обновлены коды ошибок, чтобы обеспечить более четкое понимание. – Dan

ответ

1

Права доступа к определенному файлу/каталогу применяются не только к самому каталогу, но и по пути всего.

Пример:

/home/ - needs 'x' permission (execute) 
/home/newuser/ - needs 'x' permission 
/home/newuser/public_html/ - needs 'x' permission 
/home/newuser/public_html/avatar/ - needs 'wx' permission (execute + write) 
+0

Разрешения все так, как должно быть. Я уверен, что проблема связана с Apache REMOTE_USER или с владельцем/группой – Dan

+0

@ Silver89 другой возможностью может быть seLinux –

+0

@ Silver89 также, для спокойствия вы могли бы добавить разрешения '/ home' и'/home/newuser' в сообщение? :) –

0

Он был отчасти затрагивали косвенно в обратной Silver89 под Ответ Джека, но не прямо заявил, - поэтому я хотел бы дать ответ на то, что помог мне с этим вопросом, который имел меня царапать моя голова в течение долгого времени. ;)

Лучший подход, который я нашел для назначения move_uploaded_file(), - это использовать полный абсолютный путь. Он может варьироваться в зависимости от того, находитесь ли вы на сервере Unix \ Linux или на сервере Windows, но это должно дать вам основную идею.

На моем сервере Unix на работе вы не можете использовать «../anything», но должны использовать полный абсолютный внутренний путь к файлу /var/www/html/uploads/imagename.jpg.

Вот почему ваш последний тест работал на вас, Silver89 - потому что ваш сервер, вероятно, пытался загрузить изображение в http://yourservername.com/upload/file.png вместо http://www.yourservername.com/yoursubfolder/upload/file.png. Вероятно, он вообще выбросил часть «../», и эта папка не существовала на сервере.

Вы можете узнать, что это за полное имя пути, зарегистрировавшись на сервере (терминал/ssh и т. Д.) И выдав команду «pwd», или используя код PHP и повторив команду getcwd() в лишенном php-файле в папке, где будут отображаться ваши изображения.

This site Полезно выяснить это на основе вашего сервера, используя различные функции проверки конфигурации сервера PHP. См. Таблицу на полпути вниз.Вы можете просто повторить их к экрану, таких как:

echo $_SERVER["SCRIPT_FILENAME"]. 

Это был тяжелый для меня, так что я надеюсь, что это делает его немного легче для следующего человека, чтобы найти - даже если это 8 месяцев. ;)

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