PHP создает каталог, в который он не может писать - PullRequest
2 голосов
/ 12 марта 2012
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, каталог был создан с правами доступа / владельцем:

drwxr-xr-x apache apache

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

БЕЗОПАСНЫЙ РЕЖИМ Действующее ограничение.Скрипт с uid 0 не имеет доступа к /var/www/vhosts/domain.com/httpdocs/media/uploads/DE, принадлежащему uid 48

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

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

1 Ответ

0 голосов
/ 12 марта 2012

Согласно документам PHP:

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

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

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

...