Linux上的PHP:如何使PHP使用代理设置来连接到Internet?


12

我的服务器位于局域网中,并通过代理服务器连接到Internet。我的PHP应用程序(Drupal)应该能够通过PHP代码检查更新。如何设置代理服务器设置PHP,使其正常工作?

注意:我知道我可以在curl或其他设置代理设置。但情况是该代码不是我的,我也不想更改它。我只想使PHP始终通过特定的代理设置连接到Internet。

Answers:


7

此功能不是在php中实现的,而是在讨论中:http :
//bugs.php.net/bug.php?id=29280

如果您的php> = 5.3,则可以使用auto_prepend ini设置包括使用stream_context_set_default()设置默认代理的脚本。但这只会为使用默认上下文的php部分设置代理,没有对其进行测试,但是我认为curl fore示例确实存在。


它也应该在curl上起作用,至少在源代码中有它的逻辑:link
等于

stackoverflow中有一个有效的示例,该示例使用stream_context_create而不是context_set_default,但是如果您进行更改,它将起作用。
等于2012年

1

您是否尝试过设置环境变量?

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


不,我应该使用putenv()还是在.htaccess中执行此操作?
Alexar

都不尝试编辑/ etc / environment
RedGrittyBrick 2010年

1
如果/ etc / environment没有帮助,我将编辑/ etc / apache2 / envvars,并同时放入http_proxy和HTTP_PROXY,因为有时不同的应用程序会有不同的约定。在测试之前,请完全停止并重新启动Apache。使用phpinfo检查变量对php是可见的
RedGrittyBrick 2010年

我用export http_proxy = localhost:8080 export HTTP_PROXY = localhost:8080是吗?
Alexar

1
没有人帮助。
Alexar 2010年

0

我不知道您的分布,但是在SUSE中,您可以编辑文件/etc/sysconfig/proxy并输入一个或多个代理服务器以用于系统范围。

这是一个例子:

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

谢谢。我使用Ubuntu,目前已为系统范围的使用设置了代理。但这是行不通的。
Alexar

0

如果您的服务器以只能通过代理发送http请求的方式连接,则您无需进行任何更改。但是,您将需要确保有一种方法可以验证通过代理发出的http请求。

另请注意-您的代理可能未处理所有请求-仅HTTP / https。流量可能正在通过代理服务器传递,但是如果未将代理服务器配置为以任何方式处理这些代理服务器,则它们可能会通过而没有太多跟踪。

如果您认为可能会发生这种情况,请收紧PHP服务器上的防火墙,使其只能将指定种类的流量发送到指定位置。然后,您应该能够看到故障所在并采取适当的措施。


0

您还需要信息吗?

无论如何-记录:长期的未解决问题在drupal中http://drupal.org/node/7881-确实很奇怪。-还有更多

我修补了我的核心代码,但是必须跟踪升级时补丁的变化,这并不好。

如果有一种方法可以使php使用系统范围的代理,我不知道,搜索起来很乏味。

打招呼

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.