2012-12-17 21 views
10

Mam skrypt PHP, poprzednio pracujący, który jest w stanie stworzyć katalog z mkdir:PHP w stanie stworzyć katalog z mkdir

$webfolder = "/var/www/html/images/user"; 
mkdir($webfolder, 0770); 

Zrobiłem kilka zmian w ustawieniach zgody folderze /var/www/html/images który jest teraz :

drwxrwx---. myself apache system_u:object_r:httpd_sys_content_t:s0 images 

myślę uprzednio folder ten był własnością apache. Ale ponieważ apache ma pełne uprawnienia do odczytu, zapisu i wykonywania jako grupa użytkowników, zastanawiam się, dlaczego nie może utworzyć folderu wewnątrz. Użycie wartości mkdir powoduje utworzenie wartości logicznej.

Czy przyczyną problemu jest własność katalogu, czy istnieją inne przyczyny? Zauważ, że używam wersji PHP 5.4.

Error Log dodania:

[Pon Mar 17 11:12:34 2012] [error] [client 127.0.0.1] PHP Warning: mkdir(): Permission denied in/var/www/html/upload na linii 33, referer: https://mywebsite.com/referer

+1

Czy istnieje folder '/ var/www/html/images/user'? Jeśli tak, z którymi pozwoleniami? Czy możesz - dla testowania mdłości - zmienić właściciela folderu nadrzędnego na 'apache' i spróbować, czy to działa? – hakre

+0

@hakre, to jest SELinux, który daje mi problem. Zobacz moją odpowiedź.Dziękuję za cierpliwość i czas :) –

Odpowiedz

26

odpowiedź gapi się tuż przede mną, ale tęsknię go ze względu na moją nieznajomość SELinux.

Typ kontekstu SELinux powinien być ustawiony jako httpd_sys_content_rw_t zamiast , aby folder był czytelny i zapisywalny dla Apache. Zmiana kontekstu rekursywnie odbywa się za pomocą następującej komendy:

# chcon -R -t httpd_sys_content_rw_t /var/www/html/images 

Dobry smutek. Mam nadzieję, że pomaga to innym, którzy się z tym spotykają.

+0

Mam ten sam problem tutaj .. z projektem, który próbuję stworzyć w CodeIgnter i rozwijam w Ubuntu 14.14 Lts .. Czy mógłbyś mi wyjaśnić bardziej szczegółowo kroki, których potrzebuję zrobić, aby naprawić ten błąd ??? Aby podać dodatkowe informacje: bezwzględną ścieżką jest '/ opt/lampp/htdocs/www/my-app/public/uploads'. Zasadniczo próbuję to zrobić, aby każdy zalogowany użytkownik przesłał pliki do przesłanych plików folder, a także utwórz foldery albumów (będzie to wykonane za pomocą php) do przechowywania zdjęć .. – Lykos

+0

Możesz wyświetlić tematy, które utworzyłem dla dodatkowych informacji http://stackoverflow.com/questions/32861261/codeigniter-message-mkdir- permission-denied-on-ubuntu, http://forum.codeigniter.com/thread-63136.html, http://askubuntu.com/questions/679844/mkdir-permission-denied-to-create-folders-with- php – Lykos

+0

to polecenie, które powiedziałeś, naprawiłoby mój problem w moim przypadku? – Lykos

0

Na maszynie CentOS7 VM, z PHP5.4.16/Apache 2.4.6/mariadb 5.5.44, katalog szablonów smarty nie był zapisywalny do generowania skompilowanych plików szablonów i podawał następujący błąd (w/var/log/httpd/error_log):

[Thu Mar 31 12:36:08.201383 2016] [:error] [pid 13094] [client 192.168.212.65:52204] PHP Fatal error: Smarty error: unable to write to $compile_dir '/var/www/html/app1/templates_c'. Be sure $compile_dir is writable by the web server user. in /var/www/html/app1/libs/smarty/Smarty.class.php on line 1093 

stąd aplikacja PHP wyświetlała pusty ekran.

chmod 777 templates_c nie działa; ale zgodnie z sugestią @Question Overflow, pozwolenie na root na tej maszynie wirtualnej rozwiązało problem.

musiałem wykonać:

[[email protected] html]# chcon -R -t httpd_sys_content_rw_t /var/www/html 

oczywiście cache templates_c & powinny być własnością użytkownika apache:

drwxr-xr-x. 2 apache apache  6 Mar 31 12:56 templates_c 
drwxr-xr-x. 2 apache apache  6 Mar 31 12:56 cache 

Po spędzeniu ponad pół dnia, natknąłem się na to. Dzięki