problém s nehráváním na server a open_basedir restriction
Vytvořil jsem již několikátý web na Drupalu a u každého jsme na několik pokusů s webhostingem řešili open_basedir. Vždy jim pošlu hlášení Drupalu, co se děje a oni něco nastaví a tak 2× nebo 3× dokola, než to začne fungovat. Pak další web a to samé. Můžu Vás poprosit o „rozluštění“ hlášení Drupalu? Co vlastně potřebuje nastavit? Co mu chybí? Nyní mi hlásí toto:
Při vkládání obrázku do stránky pomocí IMCE:
warning: is_file() [function.is-file]: open_basedir restriction in effect. File(/data/home/tmp/phpNhLdCu) is not within the allowed path(s): (/home/example_cz) in /data/home/example_cz/domains/example.cz/www/drupal/includes/image.inc on line 117.
Při vkládání obrázku do vlastního typu obsahu jako pole typu image:
* warning: is_file() [function.is-file]: open_basedir restriction in effect. File(/data/home/tmp/phpY8NbNf) is not within the allowed path(s): (/home/example_cz) in /data/home/example_cz/domains/example.cz/www/drupal/includes/image.inc on line 117. * warning: is_file() [function.is-file]: open_basedir restriction in effect. File(/data/home/tmp/phpY8NbNf) is not within the allowed path(s): (/home/example_cz) in /data/home/example_cz/domains/example.cz/www/drupal/includes/image.inc on line 117. * Vybraný soubor pokusny_obrazek.jpg není možné nahrát. The file is not a known image format.
dočasný adresář mám sites/tmp a vytvořil jsem jej pokusně také v sites/default/files/tmp. Oběma jsem nastavil práva 777 a i když „systém souborů“ v admin menu Drupalu ukazuje v obou případech tmp jako zapisovatelný, resp. nehlásí žádnou chybu, obrázky přes formulář na server nedostanu a ukazuje se výše popsané chybové hlášení
Díky Pavel
ta hlaska se tvari jakoze vam
ta hlaska se tvari jakoze vam to to nastaveni docasneho adresare nevzalo nebo nebere v pota, porad se snazi psat do /data/home/tmp …
Zkusil jsem také na
Zkusil jsem také na drupal/admin/settings/file-system nastavit jako dočasný adresář celou cestu na serveru:
/data/home/example_cz/domains/example.cz/www/drupal/sites/default/files/tmp.
Když tuhle cestu nějak nesmyslně na zkoušku pozměním, Drupal hlásí chybu, ale takhle ne. Prostě bere tenhle adresář jako pro něj zapisovatelný. Proč ale při nahrávání pořád píše o /data/home/tmp?
a kdyz date tmp (bez
a kdyz date tmp (bez lomítek!)
jo a dal bych si to do roout
jo a dal bych si to do roout webu, tedy aby tam nebyla slozka drupal.
Díky za rady, zkoušel jsem
Díky za rady, zkoušel jsem jen tmp a Drupal hlásí že adresář neex. Organizace má funkční starý web a musíme nejdřív vyzkoušet a vyladit verzi na Drupalu někde mimo.
Pořád s tím bojuji. Jde
Pořád s tím bojuji. Jde o zusradotin.cz. Web jsme přesunuli do rootu, sites/default/files je dle hostingu zapisovatelné, já u něj mám práva nastavená na 777. Jako dočasný adresář mám sites/default/files/tmp a tam je to to samé a přesto Drupal při nahrávání obrázku hlásí: * warning: is_file() [function.is-file]: open_basedir restriction in effect. File(/data/home/tmp/phpqAg3Vs) is not within the allowed path(s): (/home/zusradotin_cz) in /data/home/zusradotin_cz/domains/zusradotin.cz/www/includes/image.inc on line 117. * warning: is_file() [function.is-file]: open_basedir restriction in effect. File(/data/home/tmp/phpqAg3Vs) is not within the allowed path(s): (/home/zusradotin_cz) in /data/home/zusradotin_cz/domains/zusradotin.cz/www/includes/image.inc on line 117. * Vybraný soubor neni.jpg není možné nahrát. The file is not a known image format.
Když nahrávám obrázek jako přiložený soubor ke stránce, hlásí podobně: is_file() [function.is-file]: open_basedir restriction in effect. File(/data/home/tmp/phpfuGoJD) is not within the allowed path(s): (/home/zusradotin_cz) v souboru /data/home/zusradotin_cz/domains/zusradotin.cz/www/includes/image.inc na řádku 117.
Pořád chce používat jako dočasný adresář /data/home/tmp i když v systému souborů v menu Drupalu se sites/default/files a sites/default/files/tmp ukazuje jako zapisovatelné a jakoby tuhle cestu akceptuje. Proč chce psát do jiného adresáře? Prosím pomoc, už jsem z toho jelen.
Pavel
Hladám dál bez nalezení cíle.
Hladám dál bez nalezení cíle. Našel jsem ale článek http://groups.drupal.org/node/19691 , kde se píše o změnách v .htaccess. Přímo v .htaccess se píše:
# If your site is running in a VirtualDocumentRoot at http://example.com/,
# uncomment the following line:
# RewriteBase / Co je to VirtualDocumentRoot ? Nerad bych odkomentoval něco čemu nerozumím a třeba tím zavařil server. Pavel
Podívejte se třeba sem:
Podívejte se třeba sem: http://httpd.apache.org/…t_alias.html#…
btw. serveru nic neuděláte. Maximálně nepojede drupal a tak to vrátíte zpět ;-)
Děkuju za radu, zkusil jsem
Děkuju za radu, zkusil jsem odkomentovat řádek
# RewriteBase /v .htaccess ale problém s uploadem souborů to nevyřešilo. Objevily se navíc další chybová hlášení. Tohle tedy nebyla správná cesta. Ostatně moc jsem si od toho nesliboval, už jen tak zkouším, protože mne logická řešení (mimo snad instalace od píky přímo na serveru – a to taky nemusí věc vyřešit) nenapadají. Na serveru mi vypnuli safe mode. Myslel jsem, že open_base direktiva už by neměla fungovat i když by byla špatně nastavená. Otázka tedy zní: je možné, že i přes
safe_mode = Offby mohlo být příčinou problémů chybné nastavení open_basedir ?řešení s uploadem už asi nalezeno
Experimentoval jsem na lokále s php.ini a open_basedir. Zjistil jsem, že na nastavení a funkci open_basedir nemá vliv safe_mode = on nebo off. Když mi tedy na serveru nastavili safe_mode=off s tím, že to problémy bude řešit, tak nebude, pokud správně nenastaví open_basedir. S tím jsem došel k poznatku, že je třeba nastavit open_basedir = „celá cesta k rootu drupalu“. Pokud tu není cesta k rootu Drupalu, Drupal se mi vůbec nerozběhne. Když tu je, rozběhne se, ale ještě neuploaduje soubory na server. Proč, i když mám nastavený dočasný adresář v Drupalu správně? Proč pořád Drupal píše open_basedir restriction in effect? Protože php instalace jako taková má svůj vlastní dočasný adresář pro upload souborů, který si webhosting buď nastavil v php.ini nebo nenastavil a pak je nějaký systémem určený, defaultní. Tenhle adresář je potřeba mít taky pro nás Drupalisty zapisovatelný, jinak sice Drupal funguje se svým tmp adresářem moc pěkně, ale php mu nemůže předat uploadovaný soubor ze svého tmp adresáře. Co dělat? Požádat webhosting, aby do direktivy open_basedir přidali i ten „svůj“ temporary adresář určený phpčku. Open_basedir direktiva by tedy vypadala třeba takto:
v souboru php.ini
open_basedir = „C:\Documents and Settings\pavel\My Documents\web\example.cz;C:\WINDOWS\Temp“ ;adresář uvedený v řádku upload_tmp_dir=„C:\WINDOWS\Temp“ tu musí být taky uvedený, aby php mohlo protuhle instalaci Drupalu uploadovat vůbec nějaké souboryJestli jsem se v něčem zmýlil, prosím, napište mi to sem. Zatím jsem nenašel jiné vysvětlení a řešení problému. Pavel
Hosting nastavil open_basedir
Hosting nastavil open_basedir bez cesty, tedy prázdné a upload se najednou rozjel. Takže je vše vyřešeno.
open_basedir vs safe_mode
Direktiva open_basedir je úplně nezávislá na safe_mode. Od safe_mode se stejně v PHP už nějakou dobu upouští, za to s open_basedir se počítá a pro lepší zabezpečení webových serverů se běžně používá.
Nastavením open_basedir na prázdnou hodnotu se sice možná „vyřešil“ problém uploadu, ale nemyslím si, že je to řešení ideální. Lepší by pro hosting bylo, kdyby si dal tu práci a nastavil tam raději těch více adresářů – jak ten temp pro upload, tak root vašeho Drupalu. Ale jestli řeší problémy takto – no, budiž, je to jejich server. :-)
Poslat nový komentář