Autor Zpráva
nethor
Profil
Dobrý den,
mám relativně čerstvou instalaci Apache a PHP na Win7. (Apache/2.2.25 (Win32) PHP/5.3.6 )

Narazil jsem na zvláštní problém s fcí Copy:
copy("http://localhost/.... ... /foto/zdroj_100.jpg" , "tmp.jpg");  // jpeg cca 100kB s absolutní adresou z localhost nefunguje 

copy("foto/zdroj_100.jpg" , "tmp.jpg");  // jpeg cca 100kB s relativní adresou funguje 
copy("http://localhost/.... ... /foto/zdroj_12.jpg" , "tmp.jpg");  // jpeg cca 12kB s absolutní adresou z localhost funguje 
copy("http://www.server.cz/.... ... /foto/zdroj_100.jpg" , "tmp.jpg");  // jpeg cca 100kB s absolutní adresou z internetu funguje 

Nelze tedy kopírovat větší soubor z http://localhost/... , script skončí s 'PHP Fatal error: Maximum execution time of 30 seconds... '
V error.log nic dalšího také není.

Nevíte v čem je problém a jak ho řešit?
Taps
Profil
nethor:
v php.ini musí nastavit větší hodnotu u max_execution_time
Chyba nemusí být přímo u funkce copy ale ve zpracování skriptu jako celku
nethor
Profil
Taps:
To ne, chyba je jinde, kopírování 100kB souboru je operace řádově na desetiny sec.
.. a v testovacím scriptu nic jiného, než copy() není.
Tori
Profil
Je nějaká chyba v logu Apache? Pokud selhalo čtení souboru, cykluje přesměrování a podobné chyby, tak by tam něco být mělo.
nethor
Profil
Tori:
Chybu nepíše, jediné, co se týká té fotky je: 127.0.0.1 - - [12/Feb/2014:14:54:51 +0100] "GET /foto/max/introfoto_2014-02-12-14-52-17_net0.jpg HTTP/1.0" 200 775702

200 by mělo být ok.

Ale našel jsem příčinu, je to konflikt s .htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)_(.+)$         /?linkdetailtext=$1&zbozi=$2&%{QUERY_STRING} [L]

Když tyhle řádky smažu, už to funguje. Problém je stím podtržítkem v názvu souboru.
I když to nechápu:

1. Je tam podmínka zda nejde o soubor
2. Nepomůže ani když do adresáře foto a foto/max vložím prázný .htacces
3. Na ostrém serveru to funguje bez problému
Kajman
Profil
nethor:
1. Je tam podmínka zda nejde o soubor
Třeba neexistuje, pak se provede. Podle logu má výsledek 775kB ne 100kB.

2. Nepomůže ani když do adresáře foto a foto/max vložím prázný .htacces
Udělejte .htaccess a dejte do něj
RewriteEngine Off
nethor
Profil
Kajman:

Třeba neexistuje, pak se provede.
Soubor zaručeně existuje a i kdyby ne , vrátí jedna z dalších podmínek 404.

Podle logu má výsledek 775kB ne 100kB
JJ. pardon, jiný testovací soubor. Ale prakticky to nic nemění.

------------
Nicméně zpět, udělal jsem chybnou diagnózu.

Zkusil jsem nyní script s copy() vložit úplně zvlášť, do jiného adtesáře, aby ho nemohl ovlivnit žádný .htaccess.

Ve scriptu je pouze:
copy("http://localhost/copy/origname.jpg", uniqid().".jpg");

Poprvé se script provede rychle, zcela vpořádku, ale třeba při refreshi se kousne a skončí až s " Maximum execution time...." .
Kopírování souboru se přitom ale provede, nový soubor však ve win nejde smazat: " Akci nelze dokončit, protože je soubor otevřený v httpd.exe"
Smazat jde až když skončí script.

Napadá mě, jestli chybu nezpůsobují 2 prakticky současné požadavky na Apache (script a fotka) ... ?

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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