Problème fopen en local, syndication spip sur apinc etc : Comment faire communiquer 2 sites apinc entre eux ?
Le problème :
en raison de la configuration serveur (et ce "pour des problèmes obscurs de routage intranet à l'intérieur du systeme de répartition de charge entre les serveurs." ainsi que le dit
JordanApinc ) , fopen ne marche pas sur un site apinc quand la destination ouverte est un autre site hébergé aussi chez apinc.
Entre autre, ça empêche de syndiquer un site SPIP hébergé sur apinc à partir d'un autre site SPIP hébergé chez apinc... Dommage !
Et ça empêche aussi d'utiliser les scripts "envoi à un ami" pour spip comme par exemple celui-ci :
http://www.uzine.net/spip_contrib/article.php3?id_article=36.
Pistes et solutions
JordanApinc conseille à ce sujet : Idealement, pour contourner cette impossibilité techn(olog)ique, je conseille de légerement tripoter SPIP afin de remplacer ce fopen par fsockopen de 127.0.0.1 ( ip du "loopback", pour se reconnecter à la machine qui tente la connection ) sur le port 80, et de faire une requête HTTP...
Il indique un bout de code pour contourner le probleme :
http://lesavantfou.apinc.org/spip-backconnect.txt
A ladite adresse, on trouve le script suivant, pour remplacer la ligne
$fr=fopen($texte,"r");
<?
$serveur_ip = "127.0.0.1"; // ip du serveur ou est hébergée la page
$serveur_port = 80; // nom de domaine de la page que l'on veut prendre
$fr = fsockopen($serveur_ip, $serveur_port, &$errno, &$errstr, 3);
if(!$fr)
{
die("erreur de connection : $errstr ( $errno )");
}
$texte="/mailami.php3?id_article=$id_article"; // suivant l'implantation de votre spip sur votre site favori
$serveur_host = "aec.apinc.org"; // par exemple (ne pas mettre http:// ;-)
$res = fputs($fr, "GET $texte HTTP/1.0\r\n".
"Host: $serveur_host\r\n".
"Accept: text/plain\r\n".
"Connection: close\r\n".
"\r\n");
if(!$res)
{
die("erreur d'envoi de requete");
}
// passer les headers de la réponse HTTP
do
{
$str = fgets($fr, 4096);
}while( trim($str) != "");
// récupérer le contenu
while(!feof($fr)){
$recup = '';
while(!feof($fr)){
$recup .= fgets($fr,1024);
}
}
fclose($fr);
?>
Si vous faites cette manip et que ça marche, ou que ça marche pas, merci de l'écrire en commentaire de cette page, ou sur les forums apinc :-)
cela marche : signé CF
testé le 13/6/04 .
Autre solution
JeanLuc? : C'est parfois possible de procéder ainsi quand on a à disposition un site sur un autre hébergeur que apinc :
Ecrire un script et le placer sur le site hébergé par un autre serveur que apinc. Ce script reçoit en paramètre l'adresse du fichier à ouvrir sur le site apinc, fait le fopen et le boulot requis ensuite, "de l'extérieur".
C'est tout.
Hypothèse
Est-ce que Apinc ne fournit pas un proxy http à ses membres? Que se passe-t-il si un site spip hébergé chez Apinc est configuré pour utiliser ce proxy ?
Reponse : Non Apinc ne fournit pas de proxy http a ses membres.