web-dev-qa-db-fra.com

Puis-je faire une demande de courbure au même serveur?

Je dois mettre en œuvre un moyen de faire POST appels vers des pages situées sur le même serveur ou sur un autre serveur. Nous ne pouvons pas utiliser include car les fichiers que nous appelons habituellement appelent des bases de données différentes ou ont des fonctions avec Le même nom.

J'essaie d'implémenter cela à l'aide de CURL, et pendant que cela fonctionne parfaitement lorsque vous appelez des fichiers d'un autre serveur, je n'obtiens absolument rien lorsque vous apportez un appel sur le même serveur où le fichier est.

Modifier pour ajouter du code: une version simplifiée de ce que je fais:

File1.php

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "www.myserver.com/File2.php");
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>

File2.php

<?php
echo "I'M IN!!";
?>

Après avoir appelé file1.php, je ne reçois rien, mais si File2.php est sur un autre serveur, je reçois un résultat. De l'aide?

J'ai essayé d'utiliser à la fois l'URL du serveur (http ...) et l'adresse totale des fichiers (/ accueil/wwww ....)

25
Trialien

Sachez que si vous émettez la demande de courbure à votre propre site, vous utilisez le gestionnaire de session par défaut et la page que vous demandez via CURL utilise la même session que la page qui générera la demande, vous exécuterez dans une situation d'impasse.

Le gestionnaire de session par défaut verrouille le fichier de session pendant la durée de la demande de page. Lorsque vous essayez de demander une autre page en utilisant la même session, la demande ultérieure sera suspendue jusqu'à la sortie de la demande ou que le fichier de session devienne disponible. Puisque vous faites une boucle interne, le script exécutant Curl conserve une serrure sur le fichier de session et la demande de courbure ne peut jamais terminer car la page cible ne peut jamais charger la session.

51
Marc B

Parce que lorsque vous avez essayé de demander au serveur local avec l'IP publique, Apache ne pouvait pas résoudre son domaine local. Vous devez donc vérifier quelle Apache IP locale utilise pour ce domaine. Ensuite, vous devez modifier le fichier/etc/hosts et ajouter la nouvelle ligne avec IP locale plus votre domaine. Par exemple:

Mon domaine IP local pour ce domaine dans l'hôte virtuel d'Apache est le suivant: 172.190.1.120 et mon domaine est Mydomain.com, donc je vais ajouter:

172.190.1.120 Mydomain.com

Ensuite, votre boucle fonctionnera correctement.

4
Kevin Nguyen

Vous devez refacturer votre code. En plus de ce que MARC B a mentionné, cette approche ralentit inutilement votre script (potentiellement par une grande marge) et causer beaucoup de confusion. Aucune infraction, mais ce n'est qu'une solution incroyablement hacky pour une mauvaise logique.

1
vladh