PHP w systemie Linux: jak zmusić PHP do używania ustawień proxy do łączenia się z Internetem?

12

mój serwer jest w sieci LAN i jest podłączony do Internetu za pośrednictwem serwera proxy. moja aplikacja PHP (Drupal) powinna być w stanie sprawdzać dostępność aktualizacji za pomocą kodów PHP. jak mogę ustawić ustawienia proxy dla PHP , aby działało poprawnie?

Uwaga : wiem, że mogę ustawić ustawienia proxy w curl lub coś innego. ale sprawa jest taka, że ​​kod nie jest mój i nie chcę go zmieniać. Chcę tylko, aby PHP zawsze łączyło się z Internetem poprzez określone ustawienia proxy.

Alexar
źródło

Odpowiedzi:

7

Ta funkcja nie jest zaimplementowana w php, ale (była) w dyskusji:
http://bugs.php.net/bug.php?id=29280

jeśli masz php> = 5.3, możesz użyć ustawienia ini auto_prepend, aby dołączyć skrypt, który używa stream_context_set_default () do ustawienia domyślnego proxy. ale to ustawi tylko proxy dla części php, które używają domyślnego kontekstu, nie testowałem tego, ale myślę, że curl na przykład nie.

Florian Fida
źródło
Powinien także działać na curl, przynajmniej w kodzie źródłowym jest na to logika: link
następuje
Jest exemple pracy w stackoverflow że stosowanie stream_context_create zamiast context_set_default, ale to będzie działać, jeśli go zmienić.
następuje
1

Czy próbowałeś ustawić zmienne środowiskowe?

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

RedGrittyBrick
źródło
nie, powinienem to zrobić za pomocą putenv()czy w .htaccess?
Alexar
Ani spróbuj edycji / etc / environment
RedGrittyBrick 15.10
1
Jeśli / etc / environment nie pomoże, edytowałbym / etc / apache2 / envvars i wstawiłbym zarówno http_proxy, jak i HTTP_PROXY, ponieważ różne aplikacje mają czasem inne konwencje. Wykonaj kropkę i ponownie uruchom Apache przed testowaniem. Użyj phpinfo, aby sprawdzić, czy zmienne są widoczne dla php
RedGrittyBrick 15.10
użyłem eksportu http_proxy = localhost: 8080 eksport HTTP_PROXY = localhost: 8080 czy to prawda?
Alexar
1
nikt nie pomógł.
Alexar
0

Nie znam twojej dystrybucji, ale w SUSE możesz edytować plik /etc/sysconfig/proxyi wprowadzić jeden lub wiele serwerów proxy w celu wykorzystania w całym systemie.

Oto przykład:

## 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"
chrześcijanin
źródło
dzięki. używam Ubuntu i obecnie ustawiłem proxy do użytku ogólnosystemowego. ale to po prostu nie działa.
Alexar
0

Jeśli Twój serwer jest podłączony w taki sposób, że może wysyłać żądania HTTP tylko przez serwer proxy, nie musisz wprowadzać żadnych zmian. Jednak upewnij się, że masz sposób na sprawdzenie, czy Twoje żądania HTTP są przesyłane za pośrednictwem serwera proxy.

Pamiętaj też - Twój serwer proxy może nie obsługiwać wszystkich żądań - tylko http / https. Ruch może przechodzić przez serwer proxy, ale jeśli serwer proxy nie jest skonfigurowany do obsługi tych serwerów, mogą one przechodzić bez większego śladu.

Jeśli uważasz, że tak się dzieje, zaostrzę zaporę ogniową na serwerze PHP, aby mógł wysyłać tylko określony rodzaj ruchu do określonych lokalizacji. Powinieneś być w stanie zobaczyć, co się nie powiedzie i podjąć odpowiednie działania.

dunxd
źródło
0

potrzebujesz jeszcze informacji?

zresztą - dla przypomnienia: od dawna nierozstrzygnięty problem znajduje się w drupal http://drupal.org/node/7881 - naprawdę dziwne. - i jest o wiele więcej

Poprawiłem swój główny kod, ale trzeba śledzić zmiany łatek podczas aktualizacji i to nie jest miłe.

Jeśli istnieje sposób, aby php używał ogólnosystemowego proxy, nie mam pojęcia, szukanie go było uciążliwe.

pozdrawiam

groovehunter
źródło