Jag har problem med att läsa en fil via https. Jag använder fopen() för att öppna filen, som alltså ligger på en annan server.
Skriptet fungerar. Jag har testat det hos one (före detta b-one) och då fungerar det som jag vill. Men när jag kör det på min egen server så får jag följande felmeddelande:
fopen() [function.fopen]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP?
Jag antar att det är någon inställning eller liknande i min PHP-installation som spökar (eftersom det fungerar på en annan server). Jag kör med EasyPHP med PHP version 4.3.10. Jag har även testat att uppgradera till PHP 5.2.0, men samma problem kvarstår.
Man måste även tillåta att php läser url-filer via fopen
If PHP has decided that filename specifies a registered protocol, and that protocol is registered as a network URL, PHP will check to make sure that allow_url_fopen is enabled. If it is switched off, PHP will emit a warning and the fopen call will fail.
Sidan du hänvisar till har jag läst igenom, men den hjälpte mig inte. Skulle kunna vara att det är något jag inte riktigt förstår. Fler tips mottages tacksamt!!
Har aktiverat php_openssl.dll, fungerar ändå inte...
Får ta en titt på curl...
tydal, du säger att jag ska aktivera curl. Innebär detta att det redan finns installerat och att det bara är att aktivera det? Eller måste jag installera nått?
tydal, du säger att jag ska aktivera curl. Innebär detta att det redan finns installerat och att det bara är att aktivera det? Eller måste jag installera nått?
Krav
In order to use the CURL functions you need to install the CURL package. PHP requires that you use CURL 7.0.2-beta or higher. In PHP 4.2.3, you will need CURL version 7.9.0 or higher. From PHP 4.3.0, you will need a CURL version that's 7.9.8 or higher. PHP 5.0.0 requires a CURL version 7.10.5 or greater.
Hur gör jag för att aktivera curl? Jag har php_curl.dll i min extensions-mapp och jag har aktiverat "extension=php_curl.dll" (tagit bort ';'). Vad mer måste jag göra?
Note to Win32 Users: In order to enable this module on a Windows environment, libeay32.dll and ssleay32.dll must be present in your PATH.
Dessa filer hittar jag i min php-mapp, men vad menas med att de ska finnas i min "PATH"?
En annan sak... Det borde väl gå att lösa detta utan curl? Som jag nämnde i mitt första inlägg så fungerar ju mitt skript (som inte använder curl) utmärkt på one:s servrar. Vad kan de ha gjort med sin installation för att det ska fungera?
Jo, jag har sökt både på google och på php.net, men inte hittat något som fungerar. Eller ja, det fungerar på vissa servrar, men inte på den som jag kommer att använda (vilken är en standardinstallation av EasyPHP).
Men åter igen...det här med PATH, vad är det? Som det står skrivet på php.net så verkar det vara något självklart som alla vet vad det är. Utom jag då... :l
Ok, det löste sig till slut. Jag kör nu med CURL. Det var redan installerat så jag behövde bara aktivera det. Jag krånglade en hel del och testade alla möjliga sätt för att aktivera, men det fungerade inte. Jag skrev i PATH, jag kopierade dll:er hit och dit, "kommenterade fram" extensionsraden, men inget hände. Till sist hittade jag lösningen:
Eftersom jag använder EasyPHP så kunde man tydligen inte aktivera extensions på samma sätt som vanligt (jag fick iaf inte till det). Däremot var det ÄNNU enklare, när man visste hur man gjorde. Man behöver bara ha EasyPHP-fönstret uppe, trycka på "E" och välja "Konfiguration > PHP Extension". Man får då uppe en lista med kryssrutor där man kan bocka för de extensions man vill aktivera. Jag bockade för "php_curl", tryckte på "ändra" och startade om Apache (via EasyPHP-fönstret). Så svårt var det :p
Här är skriptet jag körde för att köra hämta data via https:
$url = "https://www.exempel.se";
$ch = curl_init(); // Initialisera CURL
//Sätt options...
curl_setopt($ch, CURLOPT_URL, $url); // Bestäm URL:en.
curl_setopt($ch, CURLOPT_FAILONERROR, 1); // "Fail silently if the HTTP code returned is equal to or larger than 400".
curl_setopt($ch, CURLOPT_HTTPGET, 1); // Använd GET som metod.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Gör så att curl_exec returnerar resultatet.
curl_setopt($ch, CURLOPT_TIMEOUT, 4); // Timeout efter 4s.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // Gör så att det fungerar med https.
$result = curl_exec($ch); // Kör http--request och lagra svaret.
curl_close($ch); // Stäng.