2012-03-12 5 views
2
if (!is_writable($save_path)){ 
    mkdir($save_path, 0777, true); 
} 
$uploadfile = $save_path . basename($_FILES[$form_field_name]['name']); 
if (is_writable($save_path)){ 
    move_uploaded_file($_FILES[$form_field_name]['tmp_name'], $uploadfile) 
} 

Это создаст новый реж внутри моей директории даты загрузки, и если я зашпаклевать на сервер и сделать Ls -la, то реж был создан с разрешениями/собственностями :PHP создает каталог не может написать

drwxr-хт-х апач апач

Великий. Но перемещение загруженного файла в этот новый каталог не выполняется:

SAFE MODE Ограничение действует. Сценарий которого UID является 0 не разрешен доступ /var/www/vhosts/domain.com/httpdocs/media/uploads/DE принадлежит UID 48

Хорошо, так что я получаю КАК ошибка происходит - новая папка создается с владельцем и группой, настроенной на «apache» (кто, я думаю, пользователь 48), и пользовательский «root» не может получить к ней (пользователь 0 является root, правильно?). И я предполагаю, что безопасный режим также останавливает меня, создавая каталог как 777, и решил в своей бесконечной мудрости не делать того, что я просил.

Но ... как мой PHP-скрипт создает каталоги как «apache» и пытается переместить материал в них как root? И как я могу обойти его, не взяв топор в безопасный режим?

+1

Тот факт, что ваш скрипт создает каталог, но в итоге он имеет разные разрешения от того, что вы передаете в качестве аргумента, предполагает, что есть что-то серверное, которое обеспечивает разрешения, которые может установить ваш скрипт. – GordonM

ответ

0

Per РНР-документы:

http://php.net/manual/en/function.mkdir.php

Примечание: Когда безопасный режим включен, PHP проверяет, имеет ли каталог, в котором сценарий работает один и тот же UID (владельца), как сценарий, который выполняется.

Почему бы не проверить, работает ли ваш материал под правильным пользователем. Мне кажется, что с учетом ваших ошибок скрипты PHP работают под другим пользователем. (обратите внимание, что apache работает как root)

+0

Да .. возможно, я не понял в своем вопросе: что меня смущает, так это то, что PHP, похоже, делает разные вещи под разными учетными записями пользователей. Это делает каталог как apache, но пытается написать ему как root. Или это похоже на меня. Мне не ясно, от чтения документов PHP, как это можно сделать. Или, возможно, это не так, и я смущен сообщением об ошибке. – Wintermute

+0

покажет, с кем работает php. Вы также должны (при условии, что это выполняется в поле * nix), проверьте пользователей в файле passwd и выясните, что их связало #. Может помочь процесс отладки. –