2017-06-09 6 views
-1

Aufruf habe ich zur Zeit eine JSON-API Arbeits Herstellung URLs wie https://example.com/api/user/id/0eine REST-API aus dem gleichen Server

Suche nach der besten Methode der Herstellung intern, um die API ohne die HTTPS-Bearbeitungszeit von PHP aufrufen.

Dies funktioniert:

$url = "https://example.com/api/user/id/0"; 
file_get_contents($url); 

Dies gilt nicht:

$url = "/api/user/id/0"; 
file_get_contents($url); 

oder dies:

$url = __DIR__."/api/user/id/0"; 
file_get_contents($url); 

Ich habe eine .htaccess-Datei wie folgt in der API zur Zeit:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)$ index.php?request=$1 [QSA,NC,L] 
</IfModule> 

Die Informationen aus dem Apache error log ist wenig hilfreich:

file_get_contents(/api/user/id/0): failed to open stream: No such file or directory in /var..... 

Irgendwelche Vorschläge geschätzt würde. Ich erhalte derzeit pro Anfrage eine Wartezeit von 5 Sekunden mit der vollständigen URL-Methode, obwohl die API beim Zugriff direkt in Sekundenbruchteilen angezeigt wird. Dies ist alles native PHP, keine Frameworks.

+1

'file_get_contents' wird hauptsächlich verwendet, um ** Dateiinhalte ** zu erhalten, es wird nicht magisch verstehen, dass'/api/... 'ein HTTP-Aufruf sein soll. Zumindest müssen Sie 'http: // localhost/api/...' verwenden, um dies explizit zu machen. – deceze

+0

Leider ist dies nicht möglich, da der localhost standardmäßig auf eine andere Subdomain umleitet, sodass nur der FQDN aufgerufen wird. Netter Vorschlag obwohl – Adsy2010

+1

Nun, das liegt an Ihnen und Ihrem Web-Server, um herauszufinden. :) – deceze

Antwort

-1

So habe ich einige der Forschung in Curl als Alternative zu file_get_contents()

David Walsh Webseite (https://davidwalsh.name/curl-download) hat mir eine nette Funktion get

function get_data($url) { 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 

ich diese So lautete:

echo $url ."<br>"; 
$fgt1 = time(); 
$file_get = file_get_contents($url, false); 
$fgt2 = time(); 

$cgu1 = time(); 
$curl_get = get_data($url); 
$cgu2 = time(); 

$fgt = $fgt2 - $fgt1; 
$cgu = $cgu2 - $cgu1; 
echo "<br>file_get_contents(): {$fgt}<br>curl: {$cgu}"; 

Die Antwort für die Curl-Funktion kam fast augenblicklich zurück und die Funktion file_get_contents() kam nach 5 Sekunden zurück. Ich hoffe, dass dies jemand anderen hilft, Daten aus einer JSON API auf HTTPS zu ziehen.

Ich muss jetzt untersuchen, senden verschiedene Header-Methoden über curl wie POST und DELETE, aber ich vermute, dass es irgendwo da sein wird.

Vielen Dank für alle Vorschläge, die gemacht (und gelöscht) wurden. Es half.

Verwandte Themen