GNU/Linux >> Znalost Linux >  >> Linux

file_put_contents nevytváří soubor txt

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

Linux
  1. Smazat všechny soubory v adresáři, jejichž jméno neodpovídá řádku v seznamu souborů?

  2. Vyloučit adresář v hledání?

  3. Rozdíl ve výpočtu velikosti adresáře?

  1. Proč není Nullglob výchozí?

  2. Chyba:Tcl.h nebyl nalezen (žádný takový soubor nebo adresář)?

  3. soubor:příkaz nenalezen

  1. Zapsat do souboru .txt?

  2. Proč můj symbolický odkaz vytváří soubor a ne složku?

  3. Jeden příkaz pro vytvoření adresáře a souboru v něm linuxový příkaz