98 votes

Comment faire une demande asynchrone de GET en PHP ?

Je souhaite faire une simple requête GET à un autre script sur un serveur différent. Comment dois-je faire?

Dans un cas, j'ai juste besoin de demander à un script externe sans le besoin pour n'importe quelle sortie.

make_request('http://www.externalsite.com/script1.php?variable=45'); //example usage

Dans le second cas, j'ai besoin d'obtenir le texte de sortie.

$output = make_request('http://www.externalsite.com/script2.php?variable=45');
echo $output; //string output

Pour être honnête, je ne veux pas déconner avec CURL que ce n'est pas vraiment le travail de CURL. J'ai aussi ne veux pas faire usage de http_get que je n'ai pas les extensions PECL.

Serait fsockopen travail? Si oui, comment dois-je le faire sans les lire le contenu du fichier? Il n'y a pas d'autre moyen?

Merci à tous

Mise à jour

Je dois d'ajouter, dans le premier cas, je ne veux pas attendre pour que le script retourne rien. Comme je comprends file_get_contents() doit attendre que la page se charge complètement, etc?

51voto

Marquis Wang Points 4327

``va faire ce que vous voulez

Edit : One-way pour déclencher une requête GET et retourner immédiatement.

Cité de http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html

Ce qu’il fait, c’est ouvrir une socket, déclencher une demande get et immédiatement fermer le socket et retourner.

33voto

catgofire Points 479

C’est comment faire fonctionner de réponse du Marquis avec les deux POST et les requêtes GET :

13voto

dbr Points 66401

Concernant votre mise à jour, de ne pas vouloir attendre la page à charger, je pense que un HTTP HEAD demande est ce que vous cherchez..

get_headers devrait le faire - je pense qu'il demande uniquement les en-têtes et ne pourront donc pas être envoyé à la page de contenu.

"PHP / Curl: TÊTE de Demande prend du temps sur certains sites" explique comment faire un HEAD demande l'aide de PHP/Curl

Si vous voulez déclencher la demande, et de ne pas tenir en place le script à tous, il y a un peu de moyens, de complexités différentes..

  • Exécuter la requête HTTP en tant que processus d'arrière-plan, http://stackoverflow.com/questions/45953/php-execute-a-background-process/45966 - fondamentalement, vous pouvez exécuter quelque chose comme "wget -O /dev/null $carefully_escaped_url" - ce sera la plate-forme spécifique, et vous devez être vraiment prudent au sujet d'échapper à des paramètres à la commande
  • L'exécution d'un script PHP en arrière-plan - essentiellement le même que le processus UNIX méthode, mais l'exécution d'un script PHP plutôt que d'une commande shell
  • Avoir une "file d'attente de travail", à l'aide d'une base de données (ou quelque chose comme beanstalkd qui est probablement exagéré). Vous ajouter une URL à la file d'attente, et un processus d'arrière-plan ou cron job contrôle régulièrement pour de nouveaux emplois et effectue les demandes sur l'URL

6voto

Alan Storm Points 82442

Vous n’avez pas. Bien que PHP offre plusieurs façons d’appeler une URL, il n’offre pas sortir le support de boîte pour faire toute sorte de traitement asynchrone/fileté par cycle de demande / d’exécution. Toute méthode d’envoi d’une demande pour une URL (ou une instruction SQL ou une etc.) va attendre une sorte de réponse. Vous aurez besoin d’une sorte de système secondaire en cours d’exécution sur l’ordinateur local pour atteindre cette (google autour pour « php job queue »)

3voto

Darryl Hein Points 33819

Problème intéressant. Je devine que vous voulez juste de déclencher un processus ou d'une action sur l'autre serveur, mais ne se soucient pas de ce que les résultats sont et que vous voulez votre script pour continuer. Il y a probablement quelque chose en cURL, qui peut faire ceci se produire, mais vous pouvez envisager d'utiliser exec() pour exécuter un autre script sur le serveur qui fait l'appel, si le roulage peut pas le faire. (Généralement, les gens veulent des résultats de l'appel du script donc je ne sais pas si PHP a la capacité de déclencher le processus.) Avec exec() vous pourriez exécuter un wget ou même dans un autre script PHP qui effectue la demande avec l' file_get_conents().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X