Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Переменные окружения

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Rmydar
Отправлено: 02 Апреля, 2017 - 16:21:10
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




Всем привет! Не подскажите значение ключей в массиве server:
ORIG_SCRIPT_NAME
ORIG_SCRIPT_FILENAME

Точней их значение я вижу, это /php/php-cgi.exe, и C:/php/php-cgi.exe, а вот смысл в них мне не понятен. Много где видел их использование, но у кого не спроси, или нет ответа, или говорят что это тоже самое что и ключи:
SCRIPT_NAME
SCRIPT_FILENAME

Что немного странно, если они всегда указывают на исполняем файл php (если я не ошибаюсь). А вот вразумительного ответа зачем они нужны, так не кто и не дал. Если я правильно понимаю, они установлены только тогда когда php работает CGI режиме. Может кто сможет объяснить мне назначение этих ключей, или кинуть ссылку что почитать?
 
 Top
Мелкий Супермодератор
Отправлено: 02 Апреля, 2017 - 16:43:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




https://github[dot]com/php/php-src/b[dot][dot][dot]cgi_main[dot]c#L1177
https://github[dot]com/php/php-src/b[dot][dot][dot]fpm_main[dot]c#L1127
Заполняются для cgi и fpm sapi, т.е. оба для CGI протокола. Более нигде не фигурируют.
Оба смотрят на настройку cgi.fix_pathinfo

Судя по коду, в них подставляются переданные значения из CGI заголовка, если они отличаются от непосредственно вызванного скрипта (и вызванный скрипт удалось вообще найти).


-----
PostgreSQL DBA
 
 Top
Rmydar
Отправлено: 03 Апреля, 2017 - 23:19:07
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




Спасибо большое, теперь стало намного ясней. Если я все правильно понял, к примеру если у нас будет запрос вида /my-site/index.php/something.php, то мы получим следующее значение ключей.
ORIG_PATH_TRANSLATED = C:\my-site-root\index.php\somthing.php
Что будет соответствовать ключу:
PATH_TRANSLATED = C:\my-site-root\index.php\somthing.php
Ключ:
ORIG_PATH_INFO = /my-site/index.php/something.php
Будет соответствовать ключу:
PHP_SELF = /my-site/index.php/something.php
И будет установлено значение ключа:
PATH_INFO = /something.php
Ключ:
ORIG_SCRIPT_FILENAME = С:/php/php-cgi.exe
Не будет соответствовать ключу:
SCRIPT_FILENAME = C:\my-site-root\index.php\somthing.php
Ключ:
ORIG_SCRIPT_NAME = /php/php-cgi.exe
Не будет соответствовать ключу:
SCRIPT_NAME = /my-site/index.php
Значение ключей ORIG_SCRIPT_FILENAME, и ORIG_SCRIPT_NAME, как я понимаю остается не неизменяемым,так как если судить по статье https://blogs[dot]msdn[dot]microsoft[dot]com[dot][dot][dot]path_translated/ определяет обработчик php. Тут интересный момент, так как у нас указан обработчик php скриптов, при запросе к примеру /my-site/index.html, значение ключей будет:
PATH_INFO =
PATH_TRANSLATED = C:\my-site-root\
SCRIPT_NAME = /index.html
Что немного странно, так как в мануале php написано что ключ PATH_TRANSLATED определен только тогда, когда PATH_INFO определена. Хотя там описано IIS, может там все так и работает. Выходит что ключи с префиксом ORIG не совсем тоже самое что и ключи без него, да? Если конечно я все правильно понимаю, и опять ничего не напутал.
 
 Top
Мелкий Супермодератор
Отправлено: 04 Апреля, 2017 - 11:36:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Надо разгребать те два куска исходников.

Откуда вообще вопрос возник? Уж много лет работаю, из $_SERVER нужны были только REMOTE_ADDR, GEOIP_* от nginx'а, REQUEST_URI, REQUEST_METHOD да изредка какие-нибудь клиентские HTTP_*. Поэтому разбирать два куска по 300 строк сишного кода только из спортивного интереса как-то не прельщает.


-----
PostgreSQL DBA
 
 Top
Rmydar
Отправлено: 04 Апреля, 2017 - 13:19:10
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




Вопрос возник спонтанно, я вообще недавно заинтересовался php, и большего опыта у меня в этих делах нет, кручу одну cms в целях саморазвития, пытаясь вникнуть что там, и зачем делается, вот и наткнулся на такой вот скрипт.
PHP:
скопировать код в буфер обмена
  1.  
  2. function getScriptUrl()
  3. {
  4.     $scriptName=basename($_SERVER['SCRIPT_FILENAME']);
  5.     if(basename($_SERVER['SCRIPT_NAME'])===$scriptName)
  6.         $scriptUrl=$_SERVER['SCRIPT_NAME'];
  7.     elseif(basename($_SERVER['PHP_SELF'])===$scriptName)
  8.         $scriptUrl=$_SERVER['PHP_SELF'];
  9.     elseif(isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME'])===$scriptName)
  10.         $scriptUrl=$_SERVER['ORIG_SCRIPT_NAME'];
  11.     elseif(($pos=strpos($_SERVER['PHP_SELF'],'/'.$scriptName))!==false)
  12.         $scriptUrl=substr($_SERVER['SCRIPT_NAME'],0,$pos).'/'.$scriptName;
  13.     elseif(isset($_SERVER['DOCUMENT_ROOT']) && strpos($_SERVER['SCRIPT_FILENAME'],$_SERVER['DOCUMENT_ROOT'])===0)
  14.         $scriptUrl=str_replace('\\', '/', str_replace($_SERVER['DOCUMENT_ROOT'], '', $_SERVER['SCRIPT_FILENAME']));
  15.     else
  16.         throw new Exception('Unable to determine the entry script URL.');
  17.     return rtrim(dirname($scriptUrl),'\\/');
  18. }  
  19.  

Ну а информации по этим ключам найти не смог, вот и задал вопрос, что бы понять до конца что там к чему. Хотя смысл скрипта понятен и так, так что вопрос задал просто в целях саморазвития)
 
 Top
Мелкий Супермодератор
Отправлено: 04 Апреля, 2017 - 13:52:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Загадочная штука. Видимо, довольно древняя, ещё без фронтконтроллера. Иначе не представляю, зачем этот метод вообще нужен.

В современном мире все запросы на динамический контент заворачивают на единственный php файл в пределах DOCUMENT_ROOT - index.php. Весь остальной код лежит уровнем выше и какой контроллер вызывать определяется как раз по REQUEST_URI. Поэтому вызываемый скрипт всегда известен, это index.php. Для удобства в нём же или недалеко от него определяется и директория проекта через константы __DIR__ и/или __FILE__


-----
PostgreSQL DBA
 
 Top
Rmydar
Отправлено: 05 Апреля, 2017 - 12:56:36
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




Да я бы не сказал что она довольно древняя штука, так как к примеру тот же Drupal 8 использует примерно тоже самое https://api[dot]drupal[dot]org/api/drupa[dot][dot][dot]areBaseUrl/8[dot]3[dot]x . Хотя это не совсем Drupal-ая фишка, так как он использует фреймворк Symfony по-моему 2.8, но и в 3.0 это вроде бы тоже есть. Зачем это нужно в Drupal, сейчас точно не скажу, не помню, по-моему данный скрипт используется при инсталляции Drupal, так он ищет файл установки.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB