Nedávno jsem měl stejný problém a narazil jsem na tuto otázku. Bohužel choppyfireballs OP uvedl v komentáři, že našel své vlastní řešení a právě přijal odpověď, která nikomu z nás nepomohla... Potom po hledání a úspěchu vytvořit file_put_contents práce znovu Rozhodl jsem se podělit se o své řešení.
Oprávnění mých souborů a adresářů byla v pořádku pro přijímání jakéhokoli zápisu (ujistěte se, že vaše adresáře jsou chmod 757
tím získáte root a ostatní povolení k zápisu souborů do umístění). Pokud to stále nefunguje jako u mě, je to proto, že váš systém je pravděpodobně SELinux (Security Enhanced Linux).
Pokud se chcete ujistit, napište setenforce 0
to přepne selinux do permisivního režimu, spusťte skript znovu, pokud to funguje, znamená to, že problém je dobře popsán.
V tom případě zapněte selinux setenforce 1
a zkuste ls -Zl
v adresáři, kde je adresář vašeho projektu. tím získáte řádek jako
drwx---r-x. 9 root root system_u:object_r:httpd_sys_content_t:s0 4096 Dec 8 00:25 project
nebo něco jiného než httpd_sys_content_t
pokud jste použili chcon
přenést kontext z jednoho adresáře do tohoto. ale pokud nemáte httpd_sys_content_t
je to v pořádku, protože stejně musíme změnit kontext toho adresáře.
nejprve musíte přijmout jakýkoli public_content_rw_t
kontexty pro zápis souboru. Typ
setsebool -P httpd_anon_write on
Toto nastaví (P)trvale SELinux boolean httpd_anon_write
na true a v jakémkoli kontextu označeném jako public_content_rw_t
bude mít právo zapisovat jakékoli soubory do jejich vlastního umístění.
Nyní musíte SELinuxu říci, že váš projektový adresář je public_content_rw_t
nebo stále nebudete moci zapisovat soubory. Zadejte :
semanage fcontext --add --type public_content_rw_t "/project(/.*)?"
a restorecon -RvF /project
říct selinuxu použít výše uvedené specifikace.
Nyní je váš adresář public_content_rw_t a měli byste být schopni zapisovat soubory.
Váš problém je pravděpodobně způsoben tím, že apache nemá oprávnění k zápisu do vámi zadaného umístění souboru. Přejděte do tohoto adresáře a zkontrolujte oprávnění a vlastnictví skupiny pomocí ls
příkaz:
cd "My working file location"
ls -l .
Ve výstupu jsou tři sloupce, které zobrazují oprávnění, vlastníka a skupinu pro adresář. S největší pravděpodobností je vlastní root a nemají oprávnění pro apache
pro zápis do adresáře.
Pokud je to tento případ, při pokusu o vytvoření souboru se v protokolu Apache zobrazí chyba. Zkuste sledovat své protokoly při spouštění skriptu v prohlížeči:
tail -f /var/log/apache2/error.log