Avatar billede brinck10 Nybegynder
02. februar 2011 - 18:26 Der er 6 kommentarer og
1 løsning

Problem med PHP curl "Object moved to here"

Hej eksperter.

Jeg har de sidste par dage siddet og brudt mit hoved med følgende problem. Jeg skal have filtreret en hjemmeside for noget tekst, og smidt det ud som en xml-fil. Hjemmesidens indhold henter jeg via. php curl, og det virker rigtig fint lokalt, men når jeg uploader det til min server, og kører det gennem browseren, får jeg beskeden "Object movet to here".

Selvfølgelig har jeg søgt på det på nettet, og konklusionen blev at jeg skulle tilføre:

curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, 1);

Det virker bare stadig ikke :-/!

Hele min kode ser sådan her ud:
------

if(isset($_GET["id"])){
   
    $ch = curl_init('http://www.socialdemokraterne.dk/default.aspx?func=article.view&id='.$_GET['id']);
   
    $regexTitle = "/<div id=\"articlebody\"><h1>.+<\/h1>/";
    $regexText = "/<div class=\"articleText\">.+<\/div><br clear=\"all\">/s";
    $ch = curl_init ('http://www.socialdemokraterne.dk/default.aspx?func=article.view&id='.$_GET['id']);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

    //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

    $socialdemokratiet = curl_exec($ch);
    print_r($socialdemokratiet);
   
    preg_match_all($regexTitle, $socialdemokratiet, $matchTitle);
    preg_match_all($regexText, $socialdemokratiet, $matchText);
    print($matchTitle[0][0]);
    print('<br>');
    print($matchText[0][0]);
    curl_close($ch);
}
------

Det kan ses i funktion her: http://frederikbrinck.com/platform/curl.php?id=715475

Hvad kan jeg gøre for at ordne det?

//Brinck10
Avatar billede BufferUnderrun Nybegynder
02. februar 2011 - 18:52 #1
Grunden til fejlen er, at hvis du fx besøger:

http://www.socialdemokraterne.dk/default.aspx?func=article.view&id=711620

så får du en 302 redirect til en anden URL med flere query string parametre.

Men dermed er det også helt rigtigt at du skal sætte CURLOPT_FOLLOWLOCATION.

Den eneste fejl jeg kan komme i tanke om, er at du skriver du sætter flag'et på $ch2, og i den kode du har skrevet, ligger curl-objektet i variablen $ch (uden 2)?
Avatar billede BufferUnderrun Nybegynder
02. februar 2011 - 19:01 #2
Opfølgning:

Følgende virker fint hos mig:

[code]
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://www.socialdemokraterne.dk/default.aspx?func=article.view&id=711620');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

echo curl_exec($ch);

curl_close($ch);
[/code]

Du kan se outputtet her: http://ole.michelsen.dk/test/curl-test.php
Avatar billede brinck10 Nybegynder
02. februar 2011 - 19:12 #3
Hej BufferUnderrun.

Hvis du kigger på mit link igen (http://frederikbrinck.com/platform/curl.php?id=715475), med den rettede kode, så virker det stadig ikke :/

Kan det have noget med min curl version at gøre? Her er phpinfo: http://frederikbrinck.com/platform/phpinfo.php
Avatar billede brinck10 Nybegynder
02. februar 2011 - 19:16 #4
Og det med flagget $ch2 var bare en slåfejl.
Avatar billede BufferUnderrun Nybegynder
02. februar 2011 - 20:42 #5
Hvis du har copy-pastet den kode jeg skrev ind på din .../curl.php, og den stadig ikke virker, så ved jeg ikke hvad problemet er.

FOLLOWLOCATION kan ikke bruges i safe-mode, men det lader til at det er slået fra jf. din phpinfo. Forskelle i versioner skal jeg ikke gøre mig klog på, selvom jeg bruge en lidt nyere version end dig (7.19.7 på PHP 5.3.2).
Avatar billede brinck10 Nybegynder
02. februar 2011 - 21:58 #6
Jeg er virkelig forvirret nu :S! Sad og legede med at dele url'en op i bidder, og fandt ud af at når jeg fjernede ?func=article.view, så der endte med at stå: socialdemokraterne.dk/default.aspx?id=MIN_ID så virkede det...

Derefter prøvede jeg at escape punktummet i article.view med backslash, ved godt det ikke fungere sådan, men på en eller anden måde lykkedes det alligevel:

socialdemokraterne.dk/default.aspx?func=article\.view&id=MIN_ID

med denne backslash virker det nu :S, som set:

http://frederikbrinck.com/platform/curl.php?id=715475

Tak for din hjælp. Du får point får svar ;) og en evt. forklaring på dette fænomen hvis det er muligt?

//brinck10
Avatar billede BufferUnderrun Nybegynder
02. februar 2011 - 22:10 #7
Jeg ved ikke hvorfor du ikke kunne eksemplet til at virke, men jeg tror at det virker med backslash fordi værdien af func= nu ikke valid.

Dvs. deres server kræver nok at værdien er "article.view" og hvis den er noget andet, f.eks. "article\.view" så ignorerer den det bare. Ligesom når du vælger helt at udelade func=article.view.

Godt du fik det til at spille :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester