PHP не может загрузить файл в каталогах выше его - PullRequest
2 голосов
/ 21 июля 2010

Мой PHP-скрипт, который загружает файл, не может сделать это в каталогах более высокого уровня, чем он сам.

Например: он будет сохранен в upload/ (относительный путь на том же уровне, что и скрипт), но не в /usr/local/hello/, хотя права доступа к файлу точно одинаковы.Нет проблем с максимальным размером загрузки, максимальным размером сообщения, временем выполнения и безопасным режимом.У кого-нибудь есть мысли?Я даже не могу вывести сообщение об ошибке - просто $worked ниже возвращает false, когда это не удается.

<?php
// Removed the rest of the error-checking code!
$contentDir = "/usr/local/hello/"; // <-- doesn't work, chmod 0777, owner: root, group root
//$contentDir = "upload/"; <-- works, chmod 0777 owner: root, group: root
error_reporting(E_ALL);
$filename = $_FILES["filey"]["name"];
$worked = move_uploaded_file(
              $_FILES["filey"]["tmp_name"], 
              $contentDir.$filename);
var_dump($worked);
?>

Редактировать: Мои настройки open_basedir, заданные phpinfo (), являются:

Directive     Local Value   Master Value
open_basedir  no value  no value

Спасибо!

Ответы [ 3 ]

4 голосов
/ 21 июля 2010

open_basedir переменная конфигурации, вероятно, ограничивает каталоги.

См. open_basedir в руководстве по PHP.

1 голос
/ 21 июля 2010

Пожалуйста, покажите нам содержимое $_FILES['filey']['error'], ошибки при загрузке файлов не сообщаются как обычно, но в этой структуре.

http://php.net/manual/en/features.file-upload.errors.php

Хотя весьма вероятно, что Mewp сказал

0 голосов
/ 21 июля 2010

Вы используете исходное имя файла на стороне клиента в качестве имени файла на стороне сервера. Это имя файла уже существует на сервере? Каталог может быть 0777, но если это имя файла уже существует, он также должен быть доступен для записи по UID веб-сервера.

например. если вы загружаете "resume.doc", /usr/local/hello/resume.doc уже существует? Если это также не режим 0777, то move_uploaded_file() завершится ошибкой.

docs заявляет, что если исходный файл IS является допустимым загруженным файлом, но перемещение по какой-либо причине не удается, будет выдано предупреждение, поэтому проверьте журнал ошибок PHP на что.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...