PHP copy geeft soms 500 error

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rob van der W

Rob van der W

06/01/2015 22:52:06
Quote Anchor link
Beste Allemaal,

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
 
PHP hulp

PHP hulp

29/03/2024 16:45:43
 
- Ariën  -
Beheerder

- Ariën -

06/01/2015 23:08:07
Quote Anchor link
Zijn het afbeeldingen die je vanaf een andere server probeert in te laden? In dat geval geeft die een 500-error.
 
Rob van der W

Rob van der W

06/01/2015 23:16:39
Quote Anchor link
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?
 
- Ariën  -
Beheerder

- Ariën -

06/01/2015 23:28:35
Quote Anchor link
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.
 
Rob van der W

Rob van der W

06/01/2015 23:55:15
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

07/01/2015 00:00:28
Quote Anchor link
Weet je of het gegenereerde images zijn, zoals grafieken e.d.?

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.
 
- SanThe -

- SanThe -

07/01/2015 03:54:12
Quote Anchor link
Both source and dest may now be URLs if the "fopen wrappers" have been enabled.

De vraag is dus of "fopen wrappers" aan staat.
Zo niet dan kan je geen copy doen vanaf een andere server.
 
Rob van der W

Rob van der W

07/01/2015 09:05:57
Quote Anchor link
De fopen wrappers staat bij mijn server aan. Op de remote zal dit ook moeten aanstaan anders zou de copy functie ook niet op de localhost werken.

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.
 
Ward van der Put
Moderator

Ward van der Put

07/01/2015 10:21:00
Quote Anchor link
Probeer je dit wellicht te doen in een loop met tientallen afbeeldingen? Dan open je namelijk misschien te veel verbindingen met de remote server. Je kunt dit omzeilen door één cURL-handle te openen en die te hergebruiken.

Verder misschien wat foutafhandeling toevoegen: $response = curl_exec($ch) is false als er geen verbinding kon worden geopend.
 
Rob van der W

Rob van der W

07/01/2015 16:30:27
Quote Anchor link
Op dit moment dat ik het test staat het niet in een loop en doe ik maar één curl of copy request.

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
 
Rob van der W

Rob van der W

10/01/2015 12:25:58
Quote Anchor link
Ik heb inmiddels contact opgenomen met de host en het probleem licht inderdaad daar. Iedereen bedankt die mee heeft gedacht!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.