PHP sous Linux: comment faire en sorte que PHP utilise les paramètres de proxy pour se connecter à Internet?


12

mon serveur est dans un réseau local et est connecté à Internet via un serveur proxy. mon application PHP (Drupal), devrait pouvoir vérifier les mises à jour via les codes PHP. comment puis-je définir les paramètres de proxy pour PHP afin qu'il fonctionne correctement?

Remarque : je sais que je peux définir les paramètres de proxy en boucle ou autre chose. mais le cas est que le code n'est pas le mien et je ne veux pas le changer. Je veux juste que PHP se connecte toujours à Internet via des paramètres de proxy spécifiques.

Réponses:


7

Cette fonctionnalité n'est pas implémentée en php, mais (était) en discussion:
http://bugs.php.net/bug.php?id=29280

si vous avez php> = 5.3, vous pouvez utiliser le paramètre in_ auto_prepend pour inclure un script qui utilise stream_context_set_default () pour définir un proxy par défaut. mais cela ne définira qu'un proxy pour les parties de php qui utilisent le contexte par défaut, ne l'ont pas testé, mais je pense que l'exemple de curl ne le fait pas.


Cela devrait également fonctionner sur curl, du moins dans le code source, il y a la logique: lien
aseques

Il y a un exemple de travail dans stackoverflow qui utilise stream_context_create au lieu de context_set_default, mais cela fonctionnera si vous le changez.
aseques

1

Avez-vous essayé de définir des variables d'environnement?

http_proxy = http://proxy.example.com:8080


non, dois-je le faire en utilisant putenv()ou en .htaccess?
Alexar

Ni l'un ni l'autre, essayez de modifier / etc / environment
RedGrittyBrick

1
Si / etc / environment n'aide pas, je modifierais / etc / apache2 / envvars et je mettrais à la fois http_proxy et HTTP_PROXY car différentes applications ont parfois des conventiopns différents. Faites un arrêt complet et redémarrez Apache avant de tester. Utilisez phpinfo pour vérifier que les variables sont visibles par php
RedGrittyBrick

j'ai utilisé l'exportation http_proxy = localhost: 8080 export HTTP_PROXY = localhost: 8080 est-ce vrai?
Alexar

1
personne n'a aidé.
Alexar

0

Je ne connais pas votre distribution, mais dans SUSE, vous pouvez modifier le fichier /etc/sysconfig/proxyet entrer un ou plusieurs serveurs proxy pour une utilisation à l'échelle du système.

Voici un exemple:

## Path:        Network/Proxy
## Description:
## Type:        yesno
## Default:     no
## Config:      kde,profiles
#
# Enable a generation of the proxy settings to the profile.
# This setting allows to turn the proxy on and off while
# preserving the particular proxy setup.
#
PROXY_ENABLED="yes"

## Type:        string
## Default:     ""
#
# Some programs (e.g. lynx, arena and wget) support proxies, if set in
# the environment.  SuSEconfig can add these environment variables to
# /etc/SuSEconfig/* (sourced by /etc/profile etc.) -
# See http://portal.suse.com/sdb/en/1998/01/lynx_proxy.html for more details.
# Example: HTTP_PROXY="http://proxy.provider.de:3128/"
HTTP_PROXY="http://your.proxy.here:3128"

## Type:        string
## Default:     ""
#
# Some programs (e.g. lynx, arena and wget) support proxies, if set in
# the environment.  SuSEconfig can add these environment variables to
# /etc/SuSEconfig/* (sourced by /etc/profile etc.) -
# this setting is for https connections
HTTPS_PROXY="http://your.proxy.here:3128"

## Type:        string
## Default:     ""
#
# Example: FTP_PROXY="http://proxy.provider.de:3128/"
#
FTP_PROXY="http://your.proxy.here:3128"

## Type:        string
## Default:     ""
#
# Example: GOPHER_PROXY="http://proxy.provider.de:3128/"
#
GOPHER_PROXY=""

## Type:        string(localhost)
## Default:     localhost
#
# Example: NO_PROXY="www.me.de, do.main, localhost"
#
NO_PROXY="localhost, 127.0.0.1"

Merci. j'utilise Ubuntu et j'ai actuellement défini un proxy pour une utilisation à l'échelle du système. mais cela ne fonctionne tout simplement pas.
Alexar

0

Si votre serveur est connecté de telle manière qu'il ne peut envoyer que des requêtes http via le proxy, vous ne devriez pas avoir à apporter de modifications. Cependant, vous voudrez vous assurer d'avoir un moyen de vérifier que vos requêtes http sont effectuées via le proxy.

Notez également - votre proxy peut ne pas traiter toutes les demandes - juste http / https. Le trafic peut passer par le proxy, mais si le proxy n'est pas configuré pour les gérer de toute façon, il peut passer sans grande trace.

Si vous pensez que cela peut se produire, je resserrerais le pare-feu sur le serveur PHP afin qu'il ne puisse envoyer que des types de trafic spécifiés à des emplacements spécifiés. Vous devriez alors être en mesure de voir ce qui échoue et de prendre les mesures appropriées.


0

avez-vous encore besoin d'informations?

de toute façon - pour mémoire: un problème en suspens depuis longtemps, c'est dans drupal http://drupal.org/node/7881 - vraiment étrange. - et il y a bien plus

J'ai corrigé mon code principal, mais il faut suivre les changements de correctifs lors de la mise à niveau et ce n'est pas bien.

S'il existe un moyen de faire en sorte que php utilise un proxy à l'échelle du système, je n'en ai aucune idée, la recherche était fastidieuse.

salue

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.