Autor Zpráva
frodos
Profil *
Dobrý den, nefunguje mi funkce copy. Na xammp mi fungovala normálně, ale tam byla verze php 5.8 nebo tak nějak a tady mám 5.3. Verzí to určitě nebude, ale proč mi to nechce fungovat je mi záhadou. Ví někdo čím to může být? Děkuji
Joker
Profil
frodos:
Ví někdo čím to může být?
Nejspíš to bude rozbité. Nějaký bližší popis než „nefunguje“ by nebyl?
frodos
Profil *
Byl :-)
Ono to máká stejně jako na localu, ale fce copy se neprovádí. Myslel jsem, že mu vadí php a tak pomocí htaccess jsem překopal cestu, ale to nepomohlo, tak jsem vše vrátil do původního stavu. Začal jsem si říkat zda copy nemám vypnutou, ale používám jí i na jiné stránce a tam maká jak má. Tak nevím kde dělám chybu.
          $srcfile=').'&st='.$_GET['ro]http://www.domena.com/img_rotate.php?id='.intval($row["id"]).'&st='.$_GET['ro'];
          $dstfile=$_SERVER['DOCUMENT_ROOT'].'/img/album/'.intval($row["id"]).'/image.jpg';
          mkdir(dirname($dstfile),0777,true);
          chmod($_SERVER['DOCUMENT_ROOT'].'/img/album/'.intval($row["id"]),0755);
          copy($srcfile,$dstfile);



Nevím proč se puvodní nahradil, ale snad se tohle už vypíše správně.
$srcfile=').'&st='.$_GET['ro]http://www.domena.com/img_rotate.php?id='.intval($row["id"]).'&st='.$_GET['ro'];



$srcfile=').'&st='.$_GET['ro]http://www.domena.com/img_rotate.php?id='.intval($row["id"]).'&st='.$_GET['ro'];


Něco mi to přepisuje. Samozřejmě, že to začíná http
Tori
Profil
A nezkoušel jste použít file_get/put_contents - nejdřív stáhnout obsah souboru a pak normálně uložit, jestli to taky zlobí (konkrétně načtení souboru)?
Chro
Profil
Zkusil bych se v nastavení PHP (phpinfo) podívat, zda je nastavení ALLOW_URL_FOPEN na On/Off. Pokud je off, funkce na práci se soubory nemůžou přistupovat k souborům HTTP protokolem.
frodos
Profil *
ono to php je obrazek, ktery musím překopírovat. Proto můžu použít jen funkci copy a ta nefunguje. Tak jsem v uličce.


allow_url_fopen = on
Chro
Profil
Zkus tady tu $srcfile zapsat čitelně tak, že řetězec http rozbiješ na h!ttp, možná je tam syntaktická chyba.
Pak zkus ještě po volání copy použít
$errors= error_get_last();
echo "COPY ERROR: ".$errors['type'];
echo "<br />\n".$errors['message'];
co to vypíše.
frodos
Profil *
failed to open stream: No such file or directory


Ale cesty mám správné. Možná se mu nelíbí ten obrázek v php, ale jinak ty soubory skutečně existují a cesty jsem několikrát ověřoval.


Když jsem to vypsal jako http, tak mi to vypsalo tohle: Unable to access

Předchozí hláška je, když je cesta z rootu


$srcfile='h|ttp://www.domena.com/img_rotate.php?id='.$row["id"].'&st='.$_GET['ro']; //Unable to access
Chro
Profil
Soubor k načtení na stránkách údajně neexistuje.
Když si dáš adresu ze $srcfile (samozřejmě s hodnotama z proměnných) do adr. řádku prohlížeče, obrázek se načte?
Funkce copy taky neposílá hlavičku user_agent a některé servery na chybějící identifikaci prohlížeče reagují nezasláním obsahu. Pak se to řeší přes CURL.
frodos
Profil *
Funkce copy funguje pokud mu podstrčím nějaký obrázek, ale pokud chci aby kopíroval obrázek co je v php, tak mi na to prdí z hláškou: No such file or directory


To jsem udělal jako první. Pokud tu adresu vypíšu, tak se v prohlížeči obrázek normalně načtě i do cesty jsem napsal přímo adresu bez proměných aby byla jistota, že volám správný obrázek, ale to samozřejmě nepomáhá.
Chro
Profil
Zkus místo copy dát
print_r(get_headers($srcfile, 1));
co server s obrázkem vrací za hlavičky.
frodos
Profil *
To vrací: This function may only be used against URLs


Array
(
[0] => HTTP/1.1 200 OK
[Date] => Mon, 31 Mar 2014 09:06:32 GMT
[Server] => Apache/2.2.22 (Unix) PHP/5.3.10 mod_ddmh/0.0.16
[X-Powered-By] => PHP/5.3.10
[Connection] => close
[Content-Type] => image/jpeg
)
COPY ERROR: 2<br />
mkdir() [<a href='function.mkdir'>function.mkdir</a>]: File exists


když jsem vymazal to mkdir, tak mi to vypsalo: Undefined index: kde , ale to kecá. V adrese kde mám vyplněno ?kde=test
Chro
Profil
A nebude to tím, že v [#3] nastavuješ chmodem souboru práva 0755 (ty jsou jen na čtení a spouštění) a pak se snažíš funkcí copy ten soubor přepsat? Zkusil bych 0777. Jinak už fakt nevím.
Tori
Profil
[#4] taky nefunguje? file_get_contents($url) ?
Nejsou v některé vkládané proměnné ($_GET['ro']) data, která je potřeba ošetřit urlencode?
frodos
Profil *
Taky nezabírá. Když mu dám normální obrázek, tak to skopčí, ale jakmile mu dám třeba ten samej v php, tak už na něj kašle. přitom se mi v prohlížeči zobrazuje normálně.


Tori:
data, která je potřeba ošetřit
Jsou tam jen čísla. Například 90


Musí tam bejt jenom nějaká blbost. Na xammpu mi to normálně jede


Dosáhl jsem toho kopírování, le hlásí mi po přenosu, že obrázek obsahuje chyby, ale kdyz se podívám před přenosem, tak je vpořádku. Při kopírování se něco pokazí
peta
Profil
frodos:
Urcite udelej echo cest a normalni img tag. Vsadim se, ze na serveru mas nejaky error. Zapnuty error_reporting by ho mohl vypsat. Jestli je to "Unable to access", tak tam ma unable to access. Tudiz opravneni. Zkus treba posat link na jednoduchou pokus stranku s povolenym error_reportingem. Kazdopadne, bez tech cest, co v nich mas, se stejne dal nehneme.
echo $srcfile;
echo $dstfile;
echo $_SERVER['DOCUMENT_ROOT'].'/img/album/'.intval($row["id"]);
Php kod je urcite moc fajn, ale echo zobrazi skutecny vysledek v promenne, kdy se nemusime ptat, co je v $_SERVER['DOCUMENT_ROOT'], $row["id"] a pod.

$srcfile=').'&st='.$_GET['ro]).'&st='.$_GET['ro]).'&st='.$_GET['ro]).'&st='.$_GET['ro]http://www.domena.com/img_rotate.php?id='.intval($row["id"]).'&st='.$_GET['ro'];
Mozna sis toho nevsiml, ale [#14] Tori zminila urlencode. To se pouziva pro vsechny parametry v url. V tomto kousku kodu by melo byt spravne encodovane cele toto
$srcfile=').'&st='.
urlencode($_GET['ro]http://www.domena.com/img_rotate.php?id='.intval($row["id"])) // nehlede na to, ze tady mas nejaky nesmysl a ne http, ale tos psal, zkus tam nejak zamenit ty hranate zavorky
.'&st='.
urlencode($_GET['ro']);
---
Tak si dej zobrazit obrazek v hexa editoru nebo notepadu. Asi tam mas error hlasku v datech obrazku nebo novy radek, mezeru...

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: