Почему я получаю «разрешение отказано» в PHP при попытке переименовать каталог? - PullRequest
5 голосов
/ 13 октября 2008

Я chmod'ed каталог на 777, то же самое с содержимым каталога. Тем не менее я получаю сообщение об ошибке «Отказано в доступе». PHP выдает эту ошибку, если apache не является группой / владельцем, независимо от прав доступа к файлу? Вот вызов, который не удается:

rename('/correct/path/to/dir/1', '/correct/path/to/dir/2');

Ответы [ 5 ]

11 голосов
/ 13 октября 2008

Вы редактируете каталог более высокого уровня, поэтому у пользователя PHP должен быть доступ на запись в этот каталог.

2 голосов
/ 13 октября 2008

, чтобы уточнить, php может переименовывать только те каталоги, к которым он имеет фактическое владение:

-rwxrwxrwx user   user   temp/
-rwxr-xr-x apache apache temp2/
-rw-r--r-- user   user   script.php

предположим, что script.php пытается переименовать эти два каталога:

// this operation fails as PHP (running as apache) does not own "temp",
// despite having write permissions    
rename('temp', 'temp.bak');

// this operation is successful as PHP owns "temp2"
rename('temp2, 'temp.bak'); 
2 голосов
/ 13 октября 2008

Вероятно, потому что apache не является владельцем родительского каталога. Переименование (или перемещение) файла - это то же самое, что и создание нового файла.

0 голосов
/ 13 октября 2008

Еще одна вещь, которая может помочь в подобных ситуациях, - попытаться снизить разрешения. Я видел случаи, когда apache отказывал приложению в разрешении на что-либо, потому что его разрешения слишком высокие high . Я предполагаю, что это должно способствовать хорошей практике безопасности.

0 голосов
/ 13 октября 2008

Попробуйте запустить следующий скрипт:

print_r(posix_getpwuid(getmyuid()));
print_r(pathinfo($YOUR_PATH));

И посмотри, что это вернет.

...