PHP copy geeft soms 500 error
Ik heb een probleempje met de php copy() functie. Hiermee probeer ik een afbeelding op te halen van een remote server. Dit werkt in de meeste gevallen prima, echter is er bij sommige afbeeldingen een vreemd probleem waarbij het resulteert in een 500 error. Met de afbeeldingen waarbij dit gebeurd is op het eerste oog niets vreemds (geen enorme grote of redirect bij hotlinken).
Ik heb het in PHP ook geprobeerd met curl en verschillende opties, maar ook hierbij ging het fout bij dezelfde afbeeldingen als met de copy functie. Al bij een simpele curl actie gaat het mis:
$ch = curl_init($url);
$reponse = curl_exec($ch);
curl_close($ch);
De pagina laad lang totdat er een 500 error komt.
De afbeeldingen die niet werken kan ik wel via windows curl binnen halen. Ook werken de copy en curl functies wel op de localhost (php 5.5). De server draait op php 5.4, maar als ik de localhost naar 5.4 zet werkt het daar nog steeds.
Heeft iemand enig idee waar het aan kan liggen? Kan het iets zijn met de instellingen van de server?
Voorbeeld Url waarmee het op de server niet werkt:
http://img2.cda.pl/g/129554_c5ee8459f8bcb14ad62c72406291d662.jpg
Gewijzigd op 07/01/2015 20:00:08 door Rob van der W
Zijn het afbeeldingen die je vanaf een andere server probeert in te laden? In dat geval geeft die een 500-error.
Het zijn afbeeldingen van een andere server die ik via de copy functie probeer op te slaan op mijn eigen server. Bij de meeste afbeeldingen werkt dit ook, alleen bij een aantal niet. Als ik precies hetzelfde doe op de localhost werkt het allemaal (ook de afbeeldingen waarbij het fout gaat op de server). Kan dit dan aan de afbeelding liggen, die een 500 error geeft? Dan zou het toch ook op de localhost fout moeten gaan?
Dan zal de externe server om bepaalde reden een 500-error geven. Misschien een configuratiefout daarin, maar het kan ook een anti-flooder zijn, die je tijdelijk de toegang weigert.
Ik ben er inderdaad achter dat alle andere afbeeldingen op die website ook een fout veroorzaken. Echter moet het toch mogelijk zijn om de afbeelding op te halen. Ik ben een upload script aan het maken waarbij via een url een afbeelding geüpload kan worden. Bijvoorbeeld een google of tinypic hebben dit ook en hierbij werken de afbeeldingen wel waarbij het bij mij fout gaat.
Ik vrees in ieder geval dat je het tot de beheerder van de externe partij moet zoeken. Die heeft blijkbaar een beveiliging ingebouwd of een probleem m.b.t. een configuratiefout.
De vraag is dus of "fopen wrappers" aan staat.
Zo niet dan kan je geen copy doen vanaf een andere server.
Daarnaast werkt ook een curl_init niet op voor de url (hiervoor zijn de fopen wrappers niet nodig).
Ik heb nog even getest en ook fopen($url, r); en getHeaders($url); leveren hetzelfde resultaat op als de copy en curl. Namelijk dat het lang duurt voordat de pagina geladen is en vervolgens komt er een 500 error. Al deze functies geven zelf dus geen error, wat die toch zou moeten doen als fopen wrappers unabled is.
Verder misschien wat foutafhandeling toevoegen: $response = curl_exec($ch) is false als er geen verbinding kon worden geopend.
Foutafhandeling heb ik al geprobeerd, het probleem is dat het bij curl_exec al direct fout gaat. Als ik bijvoorbeeld die(curl_exec($ch)); doe krijg ik ook de 500 error. Voordat ik iets met de response kan doen is het dus al fout gegaan.
Wat ik wel kan doen is een CURLOPT_CONNECTTIMEOUT zetten en dan is de $response inderdaad false. curl_error geeft dan: Connection timed out after .... milliseconds
Het lukt dus niet om een connectie te maken met de url??
Ik zie dat ik vergeten was om de url erbij te zetten in de openingspost. Staat er nu wel bij.
http://img2.cda.pl/g/129554_c5ee8459f8bcb14ad62c72406291d662.jpg
Toevoeging op 08/01/2015 10:18:01:
Ik heb de copy functie met de url geprobeerd op een andere host met PHP 5.4.17. Hier werkt de functie ook gewoon zoals je zou verwachten. Het lijkt dus te liggen aan de host, die PHP 5.4.21 draait. Iemand enig idee of het aan bepaalde instellingen van de host kan liggen. Of is het mogelijk dat het ip van de host is geblokkeerd? Dit lijkt me dan wel weer sterk aangezien het niet één domein is waar het mis gaat.
Gewijzigd op 07/01/2015 20:00:54 door Rob van der W
Ik heb inmiddels contact opgenomen met de host en het probleem licht inderdaad daar. Iedereen bedankt die mee heeft gedacht!