PHP на Linux: как заставить PHP использовать настройки прокси для подключения к интернету?


12

мой сервер находится в локальной сети и подключен к Интернету через прокси-сервер. мое PHP-приложение (Drupal) должно иметь возможность проверять наличие обновлений через PHP-коды. Как я могу установить параметры прокси для PHP, чтобы он функционировал должным образом?

Примечание : я знаю, что могу установить настройки прокси в curl или что-то еще. но дело в том, что код не мой, и я не хочу его менять. я просто хочу, чтобы PHP всегда подключался к интернету через определенные настройки прокси.

Ответы:


7

Эта функция не реализована в php, но (была) в обсуждении:
http://bugs.php.net/bug.php?id=29280

если у вас php> = 5.3, вы можете использовать параметр ini auto_prepend, чтобы включить скрипт, который использует stream_context_set_default () для установки прокси по умолчанию. но это установит прокси только для тех частей php, которые используют контекст по умолчанию, не проверял его, но я думаю, что curl fore example doesent.


Он должен работать и на curl, по крайней мере, в исходном коде есть логика: link
aseques

В stackoverflow есть работающий пример, который использует stream_context_create вместо context_set_default, но он будет работать, если вы его измените.
Aseques

1

Вы пытались установить переменные среды?

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


нет, я должен сделать это с помощью putenv()или в .htaccess?
Алексар

Ни один, попробуйте изменить / etc / environment
RedGrittyBrick

1
Если / etc / environment не поможет, я отредактирую / etc / apache2 / envvars и добавлю как http_proxy, так и HTTP_PROXY, поскольку разные приложения иногда имеют разные условные обозначения. Сделайте полную остановку и перезапустите Apache перед тестированием. Используйте phpinfo, чтобы проверить, что переменные видны php
RedGrittyBrick,

я использовал экспорт http_proxy = localhost: 8080 export HTTP_PROXY = localhost: 8080 это правильно?
Алексар

1
никто не помог.
Алексар

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, и в настоящее время я установил прокси для общесистемного использования. но это просто не работает.
Алексар

0

Если ваш сервер подключен таким образом, что он может только отправлять http-запросы через прокси-сервер, вам не нужно вносить какие-либо изменения. Тем не менее, вы хотите убедиться, что у вас есть способ проверить, что ваши http-запросы выполняются через прокси.

Также обратите внимание - ваш прокси не может обрабатывать все запросы - только http / https. Трафик может проходить через прокси-сервер, но если прокси-сервер не настроен на его обработку в любом случае, он может проходить без особого отслеживания.

Если вы думаете, что это может произойти, я бы ужесточил брандмауэр на PHP-сервере, чтобы он мог отправлять только определенные виды трафика в указанные места. После этого вы сможете увидеть, что не работает, и принять соответствующие меры.


0

тебе нужна еще информация?

во всяком случае - для протокола: давняя нерешенная проблема, это в drupal http://drupal.org/node/7881 - действительно странно. - и многое другое

Я исправил свой основной код, но нужно следить за изменениями исправлений при обновлении, и это нехорошо.

Если есть способ заставить php использовать прокси всей системы, я понятия не имею, искать его было утомительно.

поздравил

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.