Autor Zpráva
AM_
Profil
Zdravím,
mám následující problém: v PHP vytvořím složku a když se v ní snažím vytvořit soubor, objeví se mi následující hlášky:
Warning: file_put_contents(): SAFE MODE Restriction in effect. The script whose uid/gid is 1593/1593 is not allowed to access /home/some/folder/structure/73_1.jpg owned by uid/gid 65534/65534 in /..../ImageCache.class.php on line 298
Warning: file_put_contents(/home/some/folder/structure/73_1.jpg/150x120-1-1-fff-8-1.jpeg): failed to open stream: No such file or directory in /..../ImageCache.class.php on line 298

73_1.jpg je název složky nikoli souboru! je to složka s náhledy tohoto obrázku různé velikosti a parametrů. Přikládat kód asi nemá smysl, jedná se o jednoduchou za sebou jdoucí sekvenci mkdir() a file_put_contents(). Nenapadá vás, v čem by mohl být problém? zkoušel jsem mezi mkdir a file_put_contents vložit i chmod() na 777, ten se provedl úspěšně a složce se nastavilo 777, nicméně chyba byla stále stejná, PHP do té složky nemůže zapisovat. Stalo se tak po přesunutí webu na nový server, zřejmě je chyba někde v nastavení práv, ale nechápu kde, když se do složky pokouší zapsat stejný skript, který ji vytvořil, a to ještě během jednoho spuštění skriptu.
Nevím, kde se bere "owned by uid/gid 65534/65534" tohle číslo se tam objeví vždy a je nápadné že bude mít nějaký speciální význam (o 2 menší než 2^16), ale v unixu se příliš neorientuji, tak netuším, kde je problém.

Děkuji za pomoc
ninja
Profil
Toto je vhodné řešit ve spolupráci s konkrétním hostingem. Někdy se používá

$oldumask = umask(0);
mkdir ($adresar, 0777);
umask($oldumask);


někdy je potřeba vytvářet adresáře přes FTP

$ftp = ftp_connect("example.com");
ftp_login($ftp, "ftp_user", "ftp_heslo");
ftp_chdir($ftp, 'adresar');
ftp_mkdir($ftp, $newid) or die ("Adresar nebyl vytvoren.");
ftp_site($ftp, "CHMOD 777 " . $newid) or die("chyba CHMOD");
ftp_close($ftp)


a někdy stačí jen změna nastavení na hostingu.
AM_
Profil
ninja:
Toto je vhodné řešit ve spolupráci s konkrétním hostingem.
jedná se o server ve firmě, kde dělám, a částečně se předpokládá, že to vyřeším, ačkoli unix není zrovna moje parketa.

umask řešení nepomohlo, ftp je téměř nemyslitelné - jedná se o funkci firemního frameworku a do něj cpát připojení na FTP pro každý web na kterém běží, není přijatelné řešení.

Server běží na Apache/PHP. Co je případně potřeba nastavit, aby vytváření složek fungovalo normálně? přeci je normální, že když jedna aplikace vytvoří složku, měla by k ní mít i přístup, ne?
Davex
Profil
Je několik řešení - vypnout safe mód nebo spouštět PHP pod uživatelem, který je vlastníkem adresáře a skriptů (pomocí fastcgi + suexec nebo pomocí modulu mod_ruid). Pro PHP 4.3 existuje safe mode patch, ale ty máš asi pětku. Pokud je to ve firmě, tak doporučuji vypnout safe mode nebo nasadit suexec.

Obecně je to problém PHP modulu v tom, že se adresář vytvoří s vlastníkem, pod kterým běží Apache (nobody - uid 65534) a PHP v safe módu nedovolí akci, pokud se neshoduje vlastník běžícího skriptu (uid 1593) a adresáře.
AM_
Profil
Davex:
Díky, koukám, že snazší cestou to asi nepůjde. Možná bude jednodušší přepsat skript tak, aby nevytvářel složky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0