$_SERVER — Информация о сервере и среде исполнения | Руководство по PHP
Вернуться к: Предопределённые переменные
(PHP 4 >= 4.1.0, PHP 5, PHP 7)
$_SERVER — $HTTP_SERVER_VARS [удалено] — Информация о сервере и среде исполнения
Описание
Переменная $_SERVER — это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером. Нет гарантии, что каждый веб-сервер предоставит любую из них; сервер может опустить некоторые из них или предоставить другие, не указанные здесь. Тем не менее, многие эти переменные присутствуют в » спецификации CGI/1.1, так что вы можете их ожидать их реализации и в конкретном веб-сервере.
Переменная $HTTP_SERVER_VARS содержит ту же начальную информацию, но она не суперглобальная. (Заметьте, что $HTTP_SERVER_VARS и $_SERVER являются разными переменными, так что PHP обрабатывает их соответственно). Также учтите, что «длинные массивы» были удалены в версии PHP 5.4.0, поэтому $HTTP_SERVER_VARS больше не существует.
Индексы
- ‘PHP_SELF‘
- Имя файла скрипта, который сейчас выполняется, относительно
корня документов. Например,$_SERVER[‘PHP_SELF’] в скрипте
по адресу http://example.com/foo/bar.php будет /foo/bar.php.
Константа __FILE__
содержит полный путь и имя файла текущего (то есть
подключенного) файла.
Если PHP запущен в командной строке, эта переменная содержит
имя скрипта, начиная с PHP 4.
3.0. Раньше она была недоступна. - ‘argv’
- Массив аргументов, переданных скрипту. Когда скрипт запущен в командой строке, это дает C-подобный доступ к параметрам командной строки. Когда вызывается через метод GET, этот массив будет содержать строку запроса.
- ‘argc’
- Содержит количество параметров, переданных скрипту (если запуск произведен в командной строке).
- ‘GATEWAY_INTERFACE‘
- Содержит используемую сервером версию спецификации CGI; к примеру’CGI/1.1‘.
- ‘SERVER_ADDR‘
- IP адрес сервера, на котором выполняется текущий скрипт.
- ‘SERVER_NAME‘
- Имя хоста, на котором выполняется текущий скрипт. Если скрипт выполняется на виртуальном хосте, здесь будет содержатся имя, определенное для этого виртуального хоста.
- ‘SERVER_SOFTWARE‘
- Строка идентификации сервера, указанная в заголовках, когда происходит ответ на запрос.
- ‘SERVER_PROTOCOL‘
- Имя и версия информационного протокола, через который была запрошена страница; к примеру ‘HTTP/1.0‘;
- ‘REQUEST_METHOD‘
- Какой метод был использован для запроса страницы; к примеру ‘GET‘,
‘HEAD‘, ‘POST
Замечание:
PHP скрипт завершается после посылки заголовков (то есть после того, как осуществляет любой вывод без буферизации вывода), если запрос был осуществлен методом HEAD.
- ‘REQUEST_TIME‘
- Временная метка начала запроса. Доступна, начиная с PHP 5.1.0.
- ‘REQUEST_TIME_FLOAT‘
- Временная метка начала запроса с точностью до микросекунд. Доступна, начиная с PHP 5.4.0.
- ‘QUERY_STRING‘
- Строка запросов, если есть, с помощью которой была получена страница.
- ‘DOCUMENT_ROOT‘
- Директория корня документов, в которой выполняется текущий скрипт, в точности та, которая указана в конфигурационном файле сервера.
- ‘HTTP_ACCEPT‘
- Содержимое заголовка Accept: из текущего запроса,
если он есть.
- ‘HTTP_ACCEPT_CHARSET‘
- Содержимое заголовка Accept-Charset: из текущего запроса, если он есть. Например: ‘iso-8859-1,*,utf-8‘.
- ‘HTTP_ACCEPT_ENCODING‘
- Содержимое заголовка Accept-Encoding: из текущего запроса, если он есть. Например: ‘gzip‘.
- ‘HTTP_ACCEPT_LANGUAGE‘
- Содержимое заголовка Accept-Language:
- ‘HTTP_CONNECTION‘
- Содержимое заголовка Connection: из текущего запроса, если он есть. Например: ‘Keep-Alive‘.
- ‘HTTP_HOST‘
- Содержимое заголовка Host: из текущего запроса, если он есть.
- ‘
- Адрес страницы (если есть), которая привела браузер пользователя на эту страницу. Этот заголовок устанавливается веб-браузером пользователя. Не все браузеры устанавливают его и некоторые в качестве дополнительной возможности позволяют изменять содержимое заголовка HTTP_REFERER. Одним словом, в самом деле ему нельзя доверять.
- ‘HTTP_USER_AGENT‘
- Содержимое заголовка User-Agent: из текущего запроса, если он есть. Эта строка содержит обозначение браузера, которым пользователь запросил данную страницу. Типичным примером является строка: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Среди прочего, вы можете использовать это значение с функцией get_browser() чтобы адаптировать вывод вашей страницы к возможностям браузера пользователя
- ‘HTTPS‘
- Принимает непустое значение, если запрос был произведен через протокол HTTPS.
Замечание: Обратите внимание, что при использовании ISAPI с IIS значение будет off, если запрос не был произведен через протокол HTTPS.
- ‘REMOTE_ADDR‘
- IP-адрес, с которого пользователь просматривает текущую страницу.
- ‘REMOTE_HOST‘
- Удаленный хост, с которого пользователь просматривает текущую
страницу. Обратный просмотр DNS базируется на значении переменной REMOTE_ADDR.
Замечание: Ваш веб-сервер должен быть настроен, чтобы создавать эту переменную. Для примера, в Apache вам необходимо присутствие директивы HostnameLookups On
в файле httpd.conf, чтобы эта переменная создавалась. См. также gethostbyaddr(). - ‘REMOTE_PORT‘
- Порт на удаленной машине, который используется для связи с веб-сервером.
- ‘REMOTE_USER‘
- Аутентифицированный пользователь.
- ‘REDIRECT_REMOTE_USER‘
- Аутентифицированный пользователь, если запрос был перенаправлен изнутри.
- ‘SCRIPT_FILENAME‘
Абсолютный путь к скрипту, который в данный момент исполняется.
Замечание:
Если скрипт запускается в командной строке (CLI), используя относительный путь, такой как file.php или ../file.php, переменная $_SERVER[‘SCRIPT_FILENAME’] будет содержать относительный путь, указанный пользователем.
- ‘SERVER_ADMIN‘
- Эта переменная получает свое значение (для Apache) из директивы конфигурационного файла сервера. Если скрипт запущен на виртуальном хосте, это будет значение, определенное для данного виртуального хоста.
- ‘SERVER_PORT‘
- Порт на компьютере сервера, используемый веб-сервером для соединения.
Для установок по умолчанию, значение будет ‘80‘;
используя SLL, например, это значение будет таким, какое сконфигурировано
для соединений безопасного HTTP.
Замечание: Чтобы получить физический (реальный) порт в Apache 2, необходимо установить UseCanonicalName = On и UseCanonicalPhysicalPort = On, иначе это значение может быть подменено и не вернуть реальной значение физического порта. Полагаться на это значение небезопасно в контексте приложений, требующих усиленной безопасности.
- ‘SERVER_SIGNATURE‘
- Строка, содержащая версию сервера и имя виртуального хоста, которые добавляются к генерируемым сервером страницам, если включено.
- ‘PATH_TRANSLATED‘
- Filesystem- (not document root-) based path to the current
script, after the server has done any virtual-to-real
mapping.
Замечание: Начиная с PHP 4.3.2, переменная PATH_TRANSLATED больше не устанавливается неявно в Apache 2 SAPI, по сравнению с Apache версии 1, где она устанавливается в то же самое значение, что и переменная SCRIPT_FILENAME, когда она не используется Apache. Это изменение было сделано для соответствия спецификации CGI, где переменная PATH_TRANSLATED должна существовать только тогда, когда PATH_INFO определена. Пользователи Apache 2 могут использовать директиву AcceptPathInfo = On в конфигурационном файле httpd.conf для задания переменной PATH_INFO.
- ‘SCRIPT_NAME‘
- Содержит путь, к текущему исполняемому скрипту. Это полезно для страниц, которые должны указывать на самих себя. Константа __FILE__ содержит полный путь и имя текущего (т.е. включаемого) файла.
- ‘REQUEST_URI‘
- URI, который был передан для того, чтобы получить доступ к этой странице. Например, ‘/index.html‘.
- ‘PHP_AUTH_DIGEST‘
- При выполнении HTTP Digest аутентификации, этой переменной присваивается заголовок ‘Authorization’, который присылается клиентом (его необходимо потом использовать для соответствующей валидации).
- ‘PHP_AUTH_USER‘
- Когда выполняется HTTP-аутентификация, этой переменной присваивается имя пользователя, предоставленное пользователем.
- ‘PHP_AUTH_PW‘
- Когда выполняется HTTP-аутентификация, этой переменной присваивается пароль, предоставленный пользователем.
- ‘AUTH_TYPE‘
- Когда выполняется HTTP-аутентификация, этой переменной присваивается тип аутентификации, который используется.
- ‘PATH_INFO‘
- Содержит любой предоставленный пользователем путь, содержащийся после имени скрипта, но до строки запроса, если доступно. Например, если текущий скрипт запрошен по URL http://www.example.com/php/path_info.php/some/stuff?foo=bar, то переменная $_SERVER[‘PATH_INFO’] будет содержать /some/stuff.
- ‘ORIG_PATH_INFO‘
- Исходное значение переменной ‘PATH_INFO‘ до начала обработки PHP.
Список изменений
Примеры
Пример #1 Пример использования $_SERVER
<?php
echo $_SERVER['SERVER_NAME'];
?>
Результатом выполнения данного примера будет что-то подобное:
www.example.com
Примечания
Замечание:
Это ‘суперглобальная’ или автоматическая глобальная переменная. Это просто означает что она доступна во всех контекстах скрипта. Нет необходимости выполнять global $variable; для доступа к ней внутри метода или функции.
Смотрите также
- Расширение filter
Вернуться к: Предопределённые переменные
Побеждаем ошибки mod_fcgid/php-cgi ака suexec HTTP 500 и иже с ними, mod_fcgid: error reading data from FastCGI server
Самыми распространенными ошибками mod_fcgid являются «Premature end of script headers», «can’t lock process table in pid», «can’t apply process slot», «couldn’t bind unix domain socket», «exit(communication error), get unexpected signal 11″…
Причины этих ошибок могут быть разные, от неправильных прав на файлы до неполной загрузки файла на сервер, не правильно написанного скрипта и неправильного режима передачи файла ASCII/Двоичный. Иногда бывает проблема кроется в переводе строк Windows формата, в этом случае может помочь команда col -bx <input_file> output_file (скобки обязательны!) или редактор notepad++ «Конверсия конца строки«.
Но когда mod_fcgid в целом работает нормально, а «Connection reset by peer: mod_fcgid: error reading data from FastCGI server, referer: …» и «Premature end of script headers: php-fcgi-wrapper, referer: …» продолжают регулярно появляться в error_log, при этом php_errors.log и /var/log/httpd/suexec.log не предоставляет никакой дополнительной информации, то копать нужно глубже — /var/log/messages или /var/log/kernel.log.
Chapter 1. Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[Fri Dec 16 04:30:14.424452 2016] [fcgid:warn] [pid 26593] (104)Connection reset by peer: [client 127.0.0.1:42657] mod_fcgid: error reading data from FastCGI server, referer: http://example.com/install/index. php?restart=true [Fri Dec 16 04:30:14.424564 2016] [core:error] [pid 26593] [client 127.0.0.1:42657] End of script output before headers: index.php, referer: http://example.com/install/index.php?restart=true
[Fri Dec 16 04:30:14.424452 2016] [fcgid:warn] [pid 26593] (104)Connection reset by peer: [client 127.0.0.1:42657] mod_fcgid: error reading data from FastCGI server, referer: http://example.com/install/index.php?restart=true [Fri Dec 16 04:30:14.424564 2016] [core:error] [pid 26593] [client 127.0.0.1:42657] End of script output before headers: index.php, referer: http://example.com/install/index.php?restart=true |
Если увеличение значений в FcgidProcessLifeTime, FcgidIOTimeout, FcgidIdleTimeout, FcgidBusyTimeout, не решает проблему, тогда нужно смотреть, а не используются ли PHP акселераторы типа APC. Например при использовании opcache в PHP 7 установка PrestaShop 1. 7 обламывалась с ошибкой «Connection reset by peer: mod_fcgid: error reading data from FastCGI server«, в php.ini была указана директория для дополнительного кеширования байткода «opcache.file_cache=/var/www/.tmp
«, но после того, как «;opcache.file_cache=/var/www/.tmp
» была закомментирована — проблема исчезла.
Section 1. Причина №1 — неправильные «чмоды»
Основной причиной, как правило, появления этой ошибки может быть нехватка прав/полномочий на выполнение FastCGI скрипта, РНР в нашем случае.
Права на домашний каталог юзера в котором лежат файлы сайта должны быть 0755 и не меньше, а иначе будет «форбайден» (НТТР 403: 13PermissionDenied — Httpd Wiki), на файл же выполняющий обработку (онже FcgidWrapper) CGI скриптов «чмоды» (chmod) как минимум 750.
Если не помогло, смотрим иные варианты…
Section 2. Причина №2 — нахватка системных ресурсов
Например, первые ошибки mod_fcgid мы получили в error_log «Fri Mar 08 13:42:10 2013«:
[Fri Mar 08 13:42:10 2013] [warn] [client 81. 83.хх.ххх] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server, referer: … [Fri Mar 08 13:42:10 2013] [error] [client 81.83.хх.ххх] Premature end of script headers: php-fcgi-wrapper, referer: …
[Fri Mar 08 13:42:10 2013] [warn] [client 81.83.хх.ххх] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server, referer: … [Fri Mar 08 13:42:10 2013] [error] [client 81.83.хх.ххх] Premature end of script headers: php-fcgi-wrapper, referer: … |
Тогда открываем /var/log/messages или /var/log/kernel, находим системные события происходившие в упомянутое выше время вплоть до секунды и смотрим что же там творилось до и после ошибки php-cgi: http://pastebin.com/Gz5ccSNV
Как видим OOM Killer (oom-killer) начал прибивать процессы уже когда памяти совсем не осталось. OOM Killer — это реализация «Out of memory Killer» на уровне ядра Linux.
Виртуальной памяти (swap) в системе может быть немеряно, разумеется в пределах адресации HDD, а вот оперативной (RAM-ы) вполне ограниченное её количество. Бывают ситуации когда «чилды» (форки) процессов системы поедают ее всю (swap + RAM), и тут OOM Killer начинает среди процессов, кроме kernel init и threads, такой, который по его (oom-killer) мнению является самым ущербным (badness) и начинает его убивать.
В примере выше как раз возникла именно такая ситуация, когда «Free swap = 0kB» процессами (их чилдами/форками httpd-олигархов) httpd и php-cgi съедена вся память включая файл подкачки, «Swap is 100% used» и «Memory is 99% used» — обычно в таких ситуациях система уходит в нирвану и прекращает отвечать/реагировать на внешние команды.
Для решения проблемы поедания памяти рекомендуется снизить число чилдов (CHILDREN) апача и PHP, если PHP_FCGI_CHILDREN больше 2. Понизить значение PHP_FCGI_CHILDREN, а в случае использования PHP акселераторов типа APC и т.д. установить PHP_FCGI_CHILDREN = 0 ибо как сказано в секции «Special PHP considerations» официального мана mod_fcgid, чтоPHP акселератор APC не в состоянии расшаривать свой кэш для PHP модуля mod_fcgid если mod_fcgid/PHP использует управление процессами! Про иные акселераторы ничего не сказано, но всё же если используются любые акселераторы, то лучше управление процессами оставить на совести httpd демона.
Второй способ побороть ошибки «Connection reset by peer: mod_fcgid: error reading data from FastCGI server» и «Premature end of script headers: php-fcgi-wrapper» — это не устанавливать слишком высокое значение в PHP_FCGI_MAX_REQUESTS, которое по умолчанию равно = 500. Вместе с этим использовать директиву FcgidMaxRequestsPerProcess, значение которой должно быть <= PHP_FCGI_MAX_REQUESTS — т.е. если PHP_FCGI_MAX_REQUESTS = 1000, то и значение FcgidMaxRequestsPerProcess должно быть = 1000 или меньше, по умолчанию количество запросов отправляемых в php-cgi не контролируется, т. е. FcgidMaxRequestsPerProcess = 0.
В некоторых случаях помогает увеличение РНР лимита в php.ini, в директивах «max_execution_time = 180«, «max_input_time = 120» и «default_socket_timeout = 180«, а также установкой «FcgidIOTimeout 300» и «FcgidBusyTimeout 500» в vi /etc/httpd/conf/httpd.conf или же конфиге виртуального хоста — разумеется под каждые конкретные условия значения подбираются экспериментальным путём.
Следующим шагом будет выбор стратегии выделения памяти (OVERCOMMIT_GUESS (0), OVERCOMMIT_ALWAYS (1), OVERCOMMIT_NEVER (2)) отличной от стратегии по умолчанию. По умолчанию sysctl -w vm.overcommit_memory=0 система пытается оценить объем свободной памяти, а на практике же удовлетворяет все запросы к памяти до момента её полной утечки, после чего вызывает упомянутый выше OOM Killer (oom-killer) уже тогда, когда система ушла в нирвану «Free swap = 0kB», «Swap is 100% used» и «Memory is 99% used».
vm.overcommit_memory=1 почти тоже что и = 0, только теперь уже система не пытается оценивать объем свободной памяти, а делает вид, что её всегда хватает до момента её полной утечки. vm.overcommit_memory=2 запретит выделять больше памяти чем имеется в файле подкачки и больше оперативной памяти в процентном соотношении указанном в параметре vm.overcommit_ratio=?. Также можно вырубить эвристический поиск ущербного процесса для убивания, по умолчанию vm.oom_kill_allocating_task=0 (OOM Killer) сканирует весь список задач и на основе своего эвристического алгоритма выбирает процесс для убивания, что отнимает дополнительные ресурсы системы. Значение выше 0 запрещает сканировать список задач и говорит «OOM Killer-у» уничтожать любой процесс запросивший больше РАМ-ы чем имеется в наличии.
sysctl -w vm.overcommit_memory=2 sysctl -w vm.overcommit_ratio=90 sysctl -w vm.oom_kill_allocating_task=1
sysctl -w vm. overcommit_memory=2 sysctl -w vm.overcommit_ratio=90 sysctl -w vm.oom_kill_allocating_task=1 |
Для изменений на постоянной основе добавим в /etc/sysctl.conf. Ещё как вариант можно сделать ещё один файл подкачки, на случай вонючий:)
dd if=/dev/zero of=/root/swap1 bs=1024 count=1024K 1048576+0 records in 1048576+0 records out 1073741824 bytes (1.1 GB) copied, 8.61173 s, 125 MB/s mkswap /root/swap1 Setting up swapspace version 1, size = 1048572 KiB no label, UUID=ba18ffde-b25b-4844-9da4-6fd095c9182f swapon /root/swap1 vi /etc/fstab /root/swap1 swap swap defaults 0 0
1 2 3 4 5 6 7 8 9 10 11 12 13 |
dd if=/dev/zero of=/root/swap1 bs=1024 count=1024K 1048576+0 records in 1048576+0 records out 1073741824 bytes (1. 1 GB) copied, 8.61173 s, 125 MB/s
mkswap /root/swap1 Setting up swapspace version 1, size = 1048572 KiB no label, UUID=ba18ffde-b25b-4844-9da4-6fd095c9182f
swapon /root/swap1
vi /etc/fstab /root/swap1 swap swap defaults 0 0 |
Chapter 3. mod_fcgid: can’t lock process table in pid
Это сообщение «mod_fcgid: can’t lock process table in pid» (mod_fcgid: не может заблокировать таблицу процессов в pid) может возникать тогда, когда регулярно используется команда «apachectl graceful» — т.е. перезапуск без разрыва текущих соединений, а её выполнение попадает во время интенсивного использования/нагрузки сервера.
Chapter 4. mod_fcgid: can’t apply process slot
«mod_fcgid: can’t apply process slot» — mod_fcgid не может выделить слот для процесса…
Section 1. Причина №1 — проблемы сегментации
В лог файл виртуального хоста получили «[warn] [client 78. 159.53.233] mod_fcgid: can’t apply process slot for /var/www/user/php/php-cgi-wrapper, referer: https://www.google.com.ua/«, а в лог файл самого сервера множественные «[crit] (22)Invalid argument: ap_queue_pop failed«.
Ошибкой «Invalid argument: ap_queue_pop failed» в лог файл /var/log/httpd/error_log нагадило мегов на 300 с лишним за какие-то считанные минуты. Этой ошибке предшествовали сообщения «[alert] (11)Resource temporarily unavailable: apr_thread_create: unable to create worker thread» и «[notice] child pid 2839 exit signal Segmentation fault (11) Error in my_thread_global_end(): 1 threads didn’t exit«.
На ibm.com рекомендовалось увеличить значение «sysctl -w kernel.threads-max=120000» (по умолчанию 3525 в CentOS 6 и 7877 в CentOS 5) и уменьшить «stack size» с 10240 кб до «ulimit -s 256«.
Размер для каждого потока «thread» равен размеру «stack size», а если Apache запущен как Workerи завышены значения MaxClients, MinSpareThreads, MaxSpareThreads и ThreadsPerChild, в условиях нехватки памяти, то получим «[alert] (11)Resource temporarily unavailable: apr_thread_create: unable to create worker thread Error in my_thread_global_end(): 1 threads didn’t exit»
Можно увеличить kernel. threads-max, но «stack size» лучше оставить как есть, а иначе на некоторых страницах сайта это может вызывать ошибку «exit(communication error), get unexpected signal 11«! Однако принимая во внимание предыдущий абзац, «stack size» можно попробовать урезать в 3-5 раза или же урезать ThreadsPerChild если продолжаем получать «Resource temporarily unavailable: apr_thread_create: unable to create worker thread«.
Установить ограничение для «stack size» на постоянной основе можно в конф. файле /etc/security/limits.conf:
…. * soft stack 2048 apache hard stack 5120 # End of file
1 2 3 4 5 6 |
….
* soft stack 2048 apache hard stack 5120
# End of file |
В примере выше мягкий лимит на «stack size» для всех установлен в 2 МБ, а для пользователя apache ограничен жестким лимитом в 5 МБ. После изменения лимитов с помощью «ulimit -s 256» нужно остановить и снова запустить сервер «service httpd stop && service httpd start«, чтобы изменения вступили в силу, изменения в /etc/security/limits.conf вступят в силу после перезагрузки ОС!
Section 2. Причина №2 — проблема конфигурации
…»mod_fcgid: can’t apply process slot» может быть связана не только с ошибками сегментации, но и с другими причинами такими, как например конфигурация самого mod_fcgid. Рядом с ошибкой «mod_fcgid: can’t apply process slot» граничит и «apache https 503» (ака «Service Unavailable»).
Основную погоду делают параметры:
- FcgidMaxProcesses — максимально допустимое число php-cgi процессов запущенных одновременно;
- FcgidMaxProcessesPerClass — максимально допустимое число php-cgi процессов для каждого класса.
PerClass-ом в Апаче, имхо … как я понимаю, считается базовый хост и все его виртуальные хосты. Значит, если FcgidMaxProcessesPerClass 2, а виртуальных хостов у нас 15 + 1 базовый хост, то в итоге получаем 32 php-cgi процесса, но если FcgidMaxProcesses (1000 по умолчанию) будет ниже 32, то в итоге в лог можем получить «mod_fcgid: can’t apply process slot», а в браузер «503 Service Unavailable».
В некоторых случаях (зависит от нагрузки) значение FcgidMaxProcessesPerClass должно быть не меньше 3-5.
Эта ошибка результат уменьшения «stack size»:
less /var/log/httpd/error_log [Sun Nov 03 00:40:30 2013] [error] mod_fcgid: process /var/www/wrs/php/php-cgi-w rapper(2558) exit(communication error), get unexpected signal 11 [Sun Nov 03 00:40:30 2013] [warn] [client xxx.xxx.xxx.xxx] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server, referer: http://example. com [Sun Nov 03 00:40:30 2013] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: index.php, referer: http://example.com/ less /var/log/messages Nov 3 00:56:21 samp kernel: php-cgi[2666]: segfault at 7fffe9034f30 ip 00000000004740c3 sp 00007fffe9034ef0 error 6 in php-cgi[400000+341000]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
less /var/log/httpd/error_log
[Sun Nov 03 00:40:30 2013] [error] mod_fcgid: process /var/www/wrs/php/php-cgi-w rapper(2558) exit(communication error), get unexpected signal 11
[Sun Nov 03 00:40:30 2013] [warn] [client xxx. xxx.xxx.xxx] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server, referer: http://example. com [Sun Nov 03 00:40:30 2013] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: index.php, referer: http://example.com/
less /var/log/messages
Nov 3 00:56:21 samp kernel: php-cgi[2666]: segfault at 7fffe9034f30 ip 00000000004740c3 sp 00007fffe9034ef0 error 6 in php-cgi[400000+341000] |
Premature end of script headers / exit(communication error), get unexpected signal 11 в некоторых случаях может возникать из-за PHP акселераторов типа APC, обычно отсутствует если PHP работает «Как модуль APACHE».
Примечательно, что данная ошибка может проявляться только на некоторых страницах, обычно больших по размеру, где, например, может быть много кода раскрашиваемого Geshi плагином. Часто такие страницы создают большую нагрузку на ЦП и превысив всевозможные лимиты вызывают segfault.
Chapter 6. user mismatch (daemon instead of www)
Связанные ошибки:
/home/user/logs/error_log [Mon Dec 16 12:36:19.011343 2013] [fcgid:warn] [pid 17033:tid 2183892224] [clien t 178.94.242.15:54550] mod_fcgid: error reading data, FastCGI server closed conn ection [Mon Dec 16 12:36:19.016230 2013] [core:error] [pid 17033:tid 2183892224] [clien t 178.94.242.15:54550] End of script output before headers: writetest.php — logs/error_log suexec policy violation: see suexec log for more details — logs/suexec_log [2013-12-16 12:36:19]: user mismatch (daemon instead of www)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/home/user/logs/error_log [Mon Dec 16 12:36:19.011343 2013] [fcgid:warn] [pid 17033:tid 2183892224] [clien t 178. 94.242.15:54550] mod_fcgid: error reading data, FastCGI server closed conn ection [Mon Dec 16 12:36:19.016230 2013] [core:error] [pid 17033:tid 2183892224] [clien t 178.94.242.15:54550] End of script output before headers: writetest.php
—
logs/error_log suexec policy violation: see suexec log for more details
—
logs/suexec_log [2013-12-16 12:36:19]: user mismatch (daemon instead of www) |
Ошибка вызвана несовпадением имени пользователя указанного в директиве AP_HTTPD_USER, имя которого можно узнать выполнив «suexec -V«, с именем пользователя, которое указано в /var/www/conf/httpd.conf.
В данном случае AP_HTTPD_USER для suexec = www, а имя указанное в httpd.conf = daemon. Решение: в конфиге /var/www/conf/httpd.conf, в директивах User и Group указать имя www вместо daemon.
Chapter 7. mod_fcgid: couldn’t bind unix domain socket /var/www/logs/fcgidsock/29944.
19Сопутствующие ошибки:
[Mon Dec 16 12:40:29.310746 2013] [fcgid:warn] [pid 29944:tid 665836768] (13)Per mission denied: mod_fcgid: spawn process /home/user/php/php-cgi-wrapper error [Mon Dec 16 12:40:30.344063 2013] [fcgid:error] [pid 29944:tid 665836768] (13)Pe rmission denied: mod_fcgid: couldn’t bind unix domain socket /var/www/logs/fcgid sock/29944.19
[Mon Dec 16 12:40:29.310746 2013] [fcgid:warn] [pid 29944:tid 665836768] (13)Per mission denied: mod_fcgid: spawn process /home/user/php/php-cgi-wrapper error [Mon Dec 16 12:40:30.344063 2013] [fcgid:error] [pid 29944:tid 665836768] (13)Pe rmission denied: mod_fcgid: couldn’t bind unix domain socket /var/www/logs/fcgid sock/29944.19 |
Решается сменой прав на каталог «chmod 777 /var/www/logs/fcgidsock/» или же сменой каталога директивой FcgidIPCDir
…
Если есть ещё какие вопросы по другим ошибкам mod_fcgid, то пишем в комментарии…
Chapter 8.
Ссыль по теме:- mod_fcgid — Apache HTTP Server
- Documentation for /proc/sys/vm/*
Автор: Олег Головский
PHP: Как получить URL-адрес реферера?
Задавать вопрос
спросил
Изменено 1 год, 6 месяцев назад
Просмотрено 281 тысяч раз
72
Новинка! Сохраняйте вопросы или ответы и организуйте свой любимый контент.
Узнать больше.
У меня есть страница ( index.php
), где клиенты могут отправлять мне электронные письма. Теперь я хочу посмотреть, с какого веб-сайта пришел этот посетитель.
Как я могу получить Referrer URL
с помощью PHP? я пробовал с $_SERVER['HTTP_REFERER']
, но он все время пуст. Какую переменную мне нужно учитывать?
Вот что содержит мой $_SERVER
; Я поставил некоторые ---- CENSORED ----
из соображений конфиденциальности, на самом деле это реальные значения.
массив(31) { ["КОРНЕВОЙ_ДОКУМЕНТ"]=> строка (33) "/home/что-нибудь/public_html/дизайн" ["ШЛЮЗ_ИНТЕРФЕЙС"]=> строка(7) "CGI/1.1" ["HTTP_ACCEPT"]=> string(129) "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q =0,1 дюйма ["HTTP_ACCEPT_ENCODING"]=> string(13) "gzip, выкачать" ["HTTP_ACCEPT_LANGUAGE"]=> string(14) "en-US,en;q=0.9" ["HTTP_CACHE_CONTROL"]=> строка (8) "без кеша" ["HTTP_СОЕДИНЕНИЕ"]=> string(10) "Оставайся в живых" ["HTTP_COOKIE"]=> строка(189) "__utma=76630272.1468291432.1367655794.1367669576.1367674157.3; __utmb=76630272.1.10.1367674157; __utmc=76630272; __utmz=76630272.1367655794.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)" ["HTTP_HOST"]=> string(25) "------------" ["HTTP_USER_AGENT"]=> string(57) "Opera/9. 80 (Windows NT 6.1) Presto/2.12.388 Версия/12.15" ["ПУТЬ"]=> строка (13) "/bin:/usr/bin" ["QUERY_STRING"]=> строка(0) "" ["REDIRECT_STATUS"]=> строка(3) "200" ["REMOTE_ADDR"]=> строка(10) "5.15.68.79" ["УДАЛЕННЫЙ_ПОРТ"]=> строка(5) "57897" ["ЗАПРОС_МЕТОД"]=> строка(3) "ПОЛУЧИТЬ" ["REQUEST_URI"]=> строка (12) "/referer.php" ["SCRIPT_FILENAME"]=> строка (45) "/home/anything/public_html/design/referer.php" ["SCRIPT_NAME"]=> строка (12) "/referer.php" ["СЕРВЕР_АДРЕС"]=> string(13) "------------" ["СЕРВЕР_АДМИН"]=> string(35) "-----------" ["ИМЯ_СЕРВЕРА"]=> string(25) "------------" ["ПОРТ_СЕРВЕРА"]=> строка(2) "80" ["СЕРВЕР_ПРОТОКОЛ"]=> строка (8) "HTTP/1.1" ["СЕРВЕР_ПОДПИСЬ"]=> строка(189) " Apache/2.2.19 (Unix) mod_ssl/2.2.19 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Сервер на ---- CENSORED ---- Порт 80 " ["ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ_СЕРВЕРА"]=> строка (125) "Apache/2.2.19 (Unix) mod_ssl/2. 2.19 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635" ["УНИКАЛЬНЫЙ_ID"]=> строка (24) "UYUNcUPeiDsAABkR2eYAAAAj" ["PHP_SELF"]=> строка (12) "/referer.php" ["ЗАПРОС_ВРЕМЯ"]=> интервал (1367674225) ["аргумент"]=> массив (0) { } ["аргумент"]=> интервал (0) }
1
$_SERVER['HTTP_REFERER']
предоставит вам URL-адрес страницы реферера, если таковой существует. Если пользователи используют закладку или напрямую посещают ваш сайт, вручную вводя URL-адрес, http_referer будет пустым. Кроме того, если пользователей размещают сообщения на вашей странице программно (CURL), они также не обязаны устанавливать http_referer. Вы пропустили все _
, это опечатка?
3
Подчеркивание. Не космос.
$_SERVER['HTTP_REFERER']
5
Если переменная $_SERVER['HTTP_REFERER']
не работает, вы можете использовать либо Google Analytics, либо AddThis Analytics.
1
$_SERVER['HTTP_REFERER'];
Но если вы запустите файл (который содержит приведенный выше код), напрямую нажав URL-адрес в браузере, вы получите следующую ошибку.
Уведомление: Неопределенный индекс: HTTP_REFERER
1
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Как получить URL-адреса реферера в PHP
Вы когда-нибудь задумывались, откуда приходит трафик на ваш сайт? Понимание того, какие источники приносят трафик на ваш сайт, имеет большое значение при составлении соответствующих маркетинговых планов и рекламных кампаний?
В этой статье мы покажем вам один из самых простых способов определить ваш источник трафика, получение реферальных URL-адресов в PHP.
Чтобы вы четко поняли, как могут помочь реферальные URL-адреса, мы расскажем вам, насколько они важны для вашего сайта WordPress.
Насколько важны URL-адреса перехода на ваш сайт?
URL-адрес реферера – это гипертекстовая ссылка, по которой каждый раз, когда пользователи нажимают на нее, они переходят на другую определенную веб-страницу. Он служит ключевым фактором в генерации трафика и повышении надежности вашего сайта.
Чем больше у вас реферальных ссылок, тем больше у вас шансов получить трафик. Представьте, что кто-то просматривает сайт и находит вашу ссылку под утверждением или фактом. Они обязательно нажмут на этот URL-адрес для получения дополнительной информации.
Кроме того, ссылка с одного сайта на другой является отличным индикатором, сообщающим поисковым системам о том, что на втором веб-сайте отображается полезный релевантный контент. Если некоторые авторитетные веб-сайты ссылаются на ваши страницы, поисковые роботы будут воспринимать ваш контент как информативный и авторитетный источник. Это повышает вероятность того, что ваш сайт будет проиндексирован и появится на первой странице результатов поиска.
Поскольку вы знаете, насколько полезны URL-адреса перехода для веб-сайта, давайте узнаем, как получить URL-адреса перехода в PHP.
Как найти URL-адреса реферера в PHP
Получение URL-адресов реферера в PHP удобно с точки зрения определения источников трафика веб-сайта. Как только вы отследите, какие сайты приносят вам огромное количество трафика, вы сможете более конкретно и эффективно формировать свою маркетинговую стратегию. Более того, вы также можете определить, какие ключевые слова чаще всего используются посетителями в разных поисковых системах для перехода на сайт.
Искать URL-адреса реферера с помощью PHP очень просто. В PHP есть глобальная переменная, которая содержит указанные URL-адреса, называемые «$_SERVER». Переменная «$_SERVER» включает элемент «HTTP_REFERER», который будет возвращать URL-адреса реферера.
Объединенная переменная «$_SERVER[‘HTTP_REFERER’]» будет отображать полные URL-адреса веб-страницы, с которой связана текущая страница.
С помощью следующего фрагмента кода вы можете проверить, существует ли URL-адрес реферера, и вывести его на свою веб-страницу:
В приведенных выше кодах переменная «$_SERVER[‘HTTP_REFERER’]» покажет вам URL-адрес страницы реферера, если:
- Ссылка на вашу веб-страницу появляется на других веб-страницах.
- Посетители нажимают на эти ссылки для доступа к вашему сайту.
Если пользователи посещают ваши страницы, используя закладки или вручную вводя URL-адреса, «HTTP_REFERER» будет пустым. Поэтому вы увидите всплывающее сообщение «Нет URL-адреса реферера».
Недостатки реферальных ссылок
Преимущества реферальных ссылок также приводят к нескольким недостаткам.