PHP.SU

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

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

> Найдено сообщений: 8
Rmydar Отправлено: 09 Апреля, 2017 - 12:41:28 • Тема: COOKIE не видит куку • Форум: Вопросы новичков

Ответов: 4
Просмотров: 408
Может поможет: https://www[dot]chromestatus[dot]com/fea[dot][dot][dot]4506322921848832 .
Если я все правильно понял, после внедрения Strict Secure Cookies, устанавливать безопасные cookie из небезопасных источников, в браузерах Firefox и Chrome уже нельзя.
Rmydar Отправлено: 05 Апреля, 2017 - 12:56:36 • Тема: Переменные окружения • Форум: Вопросы новичков

Ответов: 6
Просмотров: 364
Да я бы не сказал что она довольно древняя штука, так как к примеру тот же 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, так он ищет файл установки.
Rmydar Отправлено: 04 Апреля, 2017 - 13:19:10 • Тема: Переменные окружения • Форум: Вопросы новичков

Ответов: 6
Просмотров: 364
Вопрос возник спонтанно, я вообще недавно заинтересовался 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.  

Ну а информации по этим ключам найти не смог, вот и задал вопрос, что бы понять до конца что там к чему. Хотя смысл скрипта понятен и так, так что вопрос задал просто в целях саморазвития)
Rmydar Отправлено: 04 Апреля, 2017 - 11:12:55 • Тема: Красный цвет шрифта в зависимости от даты • Форум: Вопросы новичков

Ответов: 1
Просмотров: 152
Немножко странно, если я правильно понимаю, Вы проверяете дату в последнем elseif. При условии что один из статусов всегда существует, этот elseif, с проверкой даты никогда не будет выполнен. Как выход попробуйте дописать еще один if, и проверяйте дату в не тела цикла while, примерно так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. while($row = mysql_fetch_array( $result )) {
  3.     if($row['status']=='договор'){
  4.         $bg='#CCF0F2';
  5.     } elseif($row['status']=='отказ'){
  6.         $bg='#E1BBC8';
  7.     } elseif($row['status']=='Пауза'){
  8.         $bg='#C9C4C0';
  9.     } elseif($row['status']=='Процесс'){
  10.         $bg='#99FF33';
  11.     }  else{
  12.         $bg='';
  13.     }
  14. }
  15. if ($row['dataot']>$current_date) {
  16.    $bg='#990033';
  17. }  
  18.  
Rmydar Отправлено: 03 Апреля, 2017 - 23:19:07 • Тема: Переменные окружения • Форум: Вопросы новичков

Ответов: 6
Просмотров: 364
Спасибо большое, теперь стало намного ясней. Если я все правильно понял, к примеру если у нас будет запрос вида /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 не совсем тоже самое что и ключи без него, да? Если конечно я все правильно понимаю, и опять ничего не напутал.
Rmydar Отправлено: 02 Апреля, 2017 - 16:21:10 • Тема: Переменные окружения • Форум: Вопросы новичков

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

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

Что немного странно, если они всегда указывают на исполняем файл php (если я не ошибаюсь). А вот вразумительного ответа зачем они нужны, так не кто и не дал. Если я правильно понимаю, они установлены только тогда когда php работает CGI режиме. Может кто сможет объяснить мне назначение этих ключей, или кинуть ссылку что почитать?
Rmydar Отправлено: 13 Марта, 2017 - 20:07:50 • Тема: Зачем нужна битовая операция? • Форум: Вопросы новичков

Ответов: 2
Просмотров: 210
OrmaJever пишет:
при $left < 16 вы будете получать разные значение. Зачем это нужно в данном алгоритме не знаю, т.к. даже особо не всматривался

Так то понятно что разные, а вот зачем в примере сделано так, непонятно. Я почему то долек от мысли что это сделано чисто для эстетики, что бы дать понять, что в маске содержится 16 единичек. Думаю здесь есть некий тайный смысл, тока вот в чем его суть непонятно)
(Добавление)
Ой прошу у всех прощение, надо же было так с глупить, с мной такое бывает, и это очень печально. Моя ошибка, я то думал что у меня left не может быть меньше 16, а там на оборот, если left меньше или равен 16 то left, если больше то 16, а значит не всегда 16 единичек). OrmaJever спасибо тебе большое, выел из ступора, вот написал тебе про 16 единичек, а потом подумал, а всегда ли их 16? А не деле не всегда, маски разные.
Rmydar Отправлено: 13 Марта, 2017 - 17:22:26 • Тема: Зачем нужна битовая операция? • Форум: Вопросы новичков

Ответов: 2
Просмотров: 210
Всем доброго времени суток! Не давно стал изучать PHP, и по большому счету пытаюсь понять чужой код. Так вот, есть такой метод для проверки IPv6 адресов.
PHP:
скопировать код в буфер обмена
  1.  
  2. public static function checkIp6($requestIp, $ip)
  3. {
  4.     if (!((extension_loaded('sockets') && defined('AF_INET6')) || @inet_pton('::1'))) {
  5.         throw new \RuntimeException('Unable to check Ipv6. Check that PHP was not compiled with option "disable-ipv6".');
  6.     }
  7.  
  8.     if (false !== strpos($ip, '/')) {
  9.         list($address, $netmask) = explode('/', $ip, 2);
  10.  
  11.         if ($netmask < 1 || $netmask > 128) {
  12.             return false;
  13.         }
  14.     } else {
  15.         $address = $ip;
  16.         $netmask = 128;
  17.     }
  18.  
  19.     $bytesAddr = unpack('n*', @inet_pton($address));
  20.     $bytesTest = unpack('n*', @inet_pton($requestIp));
  21.  
  22.     if (!$bytesAddr || !$bytesTest) {
  23.         return false;
  24.     }
  25.  
  26.     for ($i = 1, $ceil = ceil($netmask / 16); $i <= $ceil; ++$i) {
  27.         $left = $netmask - 16 * ($i - 1);
  28.         $left = ($left <= 16) ? $left : 16;
  29.         $mask = ~(0xffff >> $left) & 0xffff;
  30.         if (($bytesAddr[$i] & $mask) != ($bytesTest[$i] & $mask)) {
  31.             return false;
  32.         }
  33.     }    
  34.  
  35.     return true;
  36. }
  37.  

Принимает два параметра, IP адрес запроса, и IP адрес из массива доверенных узлов. Вопрос вызывает следующая строка кода.
PHP:
скопировать код в буфер обмена
  1.  
  2. $mask = ~(0xffff >> $left) & 0xffff;
  3.  

Зачем нужна эта битовая операция, если при любой длине префикса я получу одно и тоже значение? Почему нельзя его сразу назначить переменной mask? Буду признателен если сможете мне объяснить, а то мне кажется что я все время что-то упускаю.

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB