2010-09-14 3 views
1

Когда я создаю каталог с PHP mkdir(), владельцем папок является «apache». Когда я создаю каталог через FTP, владельцем является «ftpadmin».Права доступа к папке Apache

По какой-то странной причине, с функцией PHP rename(), я не могу перемещать файлы в каталог, принадлежащий «apache». У меня есть chmod() как файл, так и каталог до 777 и 0777, но «apache» отказывается переместить любые файлы в созданные им каталоги. Я могу перенести файлы apache в каталог «ftpadmin». Я пробовал chmod() и mkdir() с 777, 0777, 755, 0755, 1777, 01777 и другими.

Каталоги должны динамически генерироваться моим клиентом, и файлы необходимо перемещать и выходить.

Сервер - это выделенный виртуальный сервер, в который я могу войти и получить права администратора.

ответ

1

Пергаментные функции безопасного режима? http://www.php.net/manual/en/features.safe-mode.functions.php

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

Если безопасный режим включен, включите его и решите функциональность, которую он обеспечивает на должном уровне. Если это не проблема, то показать фактическую ошибку php, несомненно, испускает, может нам очень помочь.

+0

Спасибо! Я установил сообщение об ошибке php.ini в E_ALL, и это именно то, что было возвращено. Любопытно то, что у меня есть PHP (пользователь «apache») создает каталоги И файлы (или загружает), но по какой-то причине папки и файлы назначаются другим пользователям ... – Nick

0

PHP работает как пользователь Apache. Ваша учетная запись FTP работает как пользователь fpadmin. Вот почему владельцы разные. Вы пробовали функцию chown() php (http://php.net/manual/en/function.chown.php)? Это изменит владельца файла/каталога.

Приветствия


Уф, мой первый вниз голос. Это укусы .. Это был глупый ответ, хотя ..

Хорошо, поэтому я пытаюсь понять ваш вопрос/повторить вашу ошибку. Вот что я пробовал, и вот мои результаты. Надеюсь, это по крайней мере будет вам полезно.

У меня есть следующая структура каталогов:

/var/www/public_html/test (chmod = 777 via SSH, owned by 'ftpuser') 
/var/www/public_html/test/index.php (chmod = 777 via SSH, owned by 'ftpuser') 
/var/www/public_html/test/ftp_owned.file (chmod = 644 (default), owned by 'ftpuser') 

Затем в файле index.php У меня есть следующий код:

mkdir("./downvoted"); 
chmod("./downvoted", 0777); 
$h = fopen("./i_am_so.sad", "x+"); 
fwrite($h, "attempting to redeem myself"); 
fclose($h); 
rename("./i_am_so.sad", "./downvoted/i_am_so.sad"); 
rename("./ftp_owned.file", "./downvoted/ftp_owned.file"); 

Итоговое в новой структуре каталогов:

/var/www/public_html/test (chmod = 777 via SSH, owned by 'ftpuser') 
/var/www/public_html/test/index.php (chmod = 777 via SSH, owned by 'ftpuser') 
/var/www/public_html/test/downvoted (chmod = 0777 via PHP, owned by 'apache') 
/var/www/public_html/test/downvoted/i_am_so.sad (permissions = 644 (default), owned by 'apache') 
/var/www/public_html/test/downvoted/ftp_owned.file (permissions = 644 (default), owned by 'ftpuser') 

Все еще грустно, поскольку я не смог воспроизвести ошибку и не искупить себя. Надеюсь, вы можете либо опубликовать полученную вами ошибку (разрешение отклонено?), Либо указать, как мой эксперимент отличается от вашего приложения.

+0

chown от Apache ничего не изменит в любой системе, которая правильно настроена. – unbeli

+1

Вы не можете «отдать» файлы с chown, так что вы не могли бы использовать файл ftpadmin для apache. Этому разрешен только root. –

+0

да, спасибо, я знал, что я просто не думал. чтобы подчеркнуть мою дезинформацию. –

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