[DEBIAN] Comment "lier" PHP à une IP précise ?

5 réponses
AuteurMessage

fbparis |
Membre

Photo de fbparis

Inscrit le : 13/12/2009

# Le 08/03/2010 à 11:20

Bonjour,

Je pensais que ce serait simple, mais je me retrouve face à un gros soucis : j'ai un serveur avec plusieurs IP, disons une IP sur eth0 et une sur eth1. Je voudrais pouvoir choisir l'IP qui sera attribuer à PHP lorsqu'il fait par exemple des requetes HTTP.

Avec php-cli il n'y a aucune option dans la ligne de commande qui permette d'associer php à une interface reseau ; je n'ai rien trouvé non plus dans le php.ini qui aille dans ce sens.

Avec php-cgi, il y a bien une option -b <addr:port>, j'ai testé le script suivant sans succès (quoi que je fasse c'est toujours l'adresse IP associée à eth0 qui est utilisée par PHP) :

<?php
$f = file_get_contents('http://monip.net/');
$ip = preg_match('#<title>(.*?) - MonIP\.net</title>#s',$f,$m) ? $m[1] : 'error';
printf("%s\n",$ip);
?>


J'ai du mal à croire que cela ne soit pas possible, est-ce que l'un de vous a une solution, ou au moins une piste ? Mon OS est Debian Lenny.

TwitterOuvrir dans une nouvelle fenetre - TumblrOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 08/03/2010 à 11:35

Hello,

soit tu modifies tes règles de routage pour utiliser cette IP par défaut (et/ou uniquement pour la destination en question), soit dans PHP tu passes par les sockets qui te permettent de le choisir (socket_bind) mais cette extension n'est plus maintenue et je ne sais pas du tout comment reproduire ça avec l'extension stream.

Là comme ça, je ne vois pas d'autre méthode en tous cas.

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

fbparis | Francois
Membre

Photo de fbparis

Inscrit le : 13/12/2009

# Le 08/03/2010 à 11:47

Merci pour l'idée !

J'ai pas fait exactement comme cela mais j'ai réussi

En ajoutant ces quelques lignes en début de script, cela permet de ne pas avoir à réécrire le reste :


$opts = array(
'socket' => array(
'bindto' => 'a.b.c.d:0'
)
);

stream_context_get_default($opts);



Avec a.b.c.d une de mes IP Encore merci !

TwitterOuvrir dans une nouvelle fenetre - TumblrOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 08/03/2010 à 11:53

Ah donc l'extension stream le permet bien, je me le note aussi, ça peut servir !

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Salemioche | Nicolas
Membre

Photo de Salemioche

Inscrit le : 26/12/2008

# Le 08/03/2010 à 16:46

sinon via curl

curl_setopt($ch, CURLOPT_INTERFACE, '10.0.0.1');

fbparis | Francois
Membre

Photo de fbparis

Inscrit le : 13/12/2009

# Le 09/03/2010 à 04:07

Faudra que je fasse des tests avec curl aussi en effet...

Sinon j'ai fait deux fichiers, un pour php-cli avec une ligne :

<?php stream_context_get_default(array('socket'=>array('bindto'=>'A.B.C.D:0'))); ?>


Un autre pour php-cgi :

<?php stream_context_get_default(array('socket'=>array('bindto'=>$_SERVER['SERVER_ADDR'] . ':0'))); ?>


Et j'ai modifié les php.ini respectifs pour inclure ces scripts avec l'option auto_prepend_file... C'est quand même du bricolage et pour php-cgi je vais probablement virer le auto_prepend_file et modifier mes scripts au cas par cas quand c'est nécessaire pour ne pas plomber inutilement les perfs. Une option dans le php.ini ne serait pas du luxe

TwitterOuvrir dans une nouvelle fenetre - TumblrOuvrir dans une nouvelle fenetre

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 24/11/2024 1:42:20 | Généré en 11.27ms | Contacts | Mentions légales |