PHP unter Linux: Wie kann PHP Proxy-Einstellungen verwenden, um eine Verbindung zum Internet herzustellen?


12

Mein Server befindet sich in einem LAN und ist über einen Proxyserver mit dem Internet verbunden. Meine PHP-Anwendung (Drupal) sollte in der Lage sein, über PHP-Codes nach Updates zu suchen. Wie kann ich die Proxy-Einstellungen für PHP so einstellen , dass es richtig funktioniert?

Hinweis : Ich weiß, dass ich Proxy-Einstellungen in Curl oder etwas anderem festlegen kann. aber der Fall ist, dass der Code nicht meiner ist und ich ihn nicht ändern möchte. Ich möchte nur, dass PHP immer über bestimmte Proxy-Einstellungen eine Verbindung zum Internet herstellt.

Antworten:


7

Diese Funktion ist nicht in PHP implementiert, wurde aber diskutiert:
http://bugs.php.net/bug.php?id=29280

Wenn Sie php> = 5.3 haben, können Sie die Einstellung auto_prepend ini verwenden, um ein Skript einzuschließen, das stream_context_set_default () verwendet, um einen Standard-Proxy festzulegen. aber dies wird nur einen Proxy für die Teile von PHP setzen, die den Standardkontext verwenden, habe es nicht getestet, aber ich denke, Curl Fore Beispiel tut dies.


Es sollte auch auf Curl funktionieren, zumindest im Quellcode gibt es die Logik dafür: link
aseques

In stackoverflow gibt es ein funktionierendes Beispiel , das stream_context_create anstelle von context_set_default verwendet. Es funktioniert jedoch, wenn Sie es ändern.
Aseques

1

Haben Sie versucht, Umgebungsvariablen festzulegen?

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


Nein, sollte ich dies mit putenv()oder in .htaccess tun ?
Alexar

Versuchen Sie auch nicht, / etc / environment
RedGrittyBrick

1
Wenn / etc / environment nicht hilft, würde ich / etc / apache2 / envvars bearbeiten und sowohl http_proxy als auch HTTP_PROXY einfügen, da verschiedene Anwendungen manchmal unterschiedliche Konventionen haben. Führen Sie vor dem Testen einen Punkt und einen Neustart von Apache durch. Verwenden Sie phpinfo, um zu überprüfen, ob die Variablen für php sichtbar sind
RedGrittyBrick

Ich habe Export verwendet http_proxy = localhost: 8080 export HTTP_PROXY = localhost: 8080 ist es richtig?
Alexar

1
niemand half.
Alexar

0

Ich kenne Ihre Distribution nicht, aber in SUSE können Sie die Datei bearbeiten /etc/sysconfig/proxyund einen oder mehrere Proxyserver für die systemweite Verwendung eingeben.

Hier ist ein Beispiel:

## 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"

Vielen Dank. Ich benutze Ubuntu und habe derzeit Proxy für die systemweite Nutzung eingestellt. aber es funktioniert einfach nicht.
Alexar

0

Wenn Ihr Server so verbunden ist, dass er nur http-Anforderungen über den Proxy senden kann, sollten Sie keine Änderungen vornehmen müssen. Sie sollten jedoch sicherstellen, dass Sie überprüfen können, ob Ihre http-Anforderungen über den Proxy erfolgen.

Beachten Sie auch, dass Ihr Proxy möglicherweise nicht alle Anforderungen verarbeitet - nur http / https. Der Datenverkehr wird möglicherweise durch den Proxy geleitet. Wenn der Proxy jedoch nicht für die Verarbeitung dieser Daten konfiguriert ist, werden sie möglicherweise spurlos weitergeleitet.

Wenn Sie glauben, dass dies passieren könnte, würde ich die Firewall auf dem PHP-Server verschärfen, damit nur bestimmte Arten von Datenverkehr an bestimmte Speicherorte gesendet werden können. Sie sollten dann in der Lage sein, zu sehen, was fehlschlägt, und geeignete Maßnahmen zu ergreifen.


0

Benötigen Sie noch Informationen?

sowieso - fürs Protokoll: ein langes offenes Problem ist dies in drupal http://drupal.org/node/7881 - wirklich seltsam. - und es gibt noch viel mehr

Ich habe meinen Kerncode gepatcht, aber man muss die Patch-Änderungen beim Upgrade nachverfolgen und es ist nicht schön.

Wenn es eine Möglichkeit gibt, PHP dazu zu bringen, systemweiten Proxy zu verwenden, habe ich keine Ahnung, die Suche danach war mühsam.

grüßt

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.