PHP примеры

PHP redirect

Redirect или перенаправление на другую страницу в PHP осуществляется путем отправки специального HTTP заголовка функцией header:

<?php
header('Location: http://www.tigir.com/php.htm');
exit;
?>

Редирект с задержкой можно сделать так:

<?php
header('Refresh: 3; URL=http://www.tigir.com/php.htm');
echo 'Через 3 сек. вы будете перенаправлены на новую страницу.';
exit;
?>

ВАЖНО!!! Заголовки функцией header нужно отправлять до любого вывода текста в браузер! Даже перед <?php не должно быть пробелов!

Смотрите также javascript redirect и redirect html, редирект с помощью htaccess.

Определение тИЦ

Для определения Яндекс тИЦ (тИЦ - тематический индекс цитирования) пойдем тем же путем что и расширение Яндекс.Бар. Чтобы проверить тИЦ Яндекс.Бар посылает запрос по адресу http://bar-navig.yandex.ru/u?ver=2&show=32&url=http://www.сайт.ru и получает XML документ следующего вида:

<urlinfo>
	<url domain="www.сайт.ru">/</url>
	<tcy rang="4" value="250"/>
	<topics> </topics>
	<textinfo> </textinfo>
</urlinfo>

Значение тИЦ - это значение аттрибута value элемента tcy, вот его и нужно выдрать из документа, а как смотрите ниже:

<?
function getTCY($url)
{
  //считываем XML-файл с данными
  $xml = file_get_contents('http://bar-navig.yandex.ru/u?ver=2&show=32&url='.$url);

  //если XML файл прочитан, то возвращаем значение параметра value, иначе возвращаем false - ошибка
  return $xml ? (int) substr(strstr($xml, 'value="'), 7) : false;
}
?>

Теперь чтобы узнать тИЦ Яндекса нужно вызвать функцию getTCY и передать ей в качестве параметра URL сайта:

$tcy = getTCY('http://www.tigir.com');

Определение pagerank

Google PageRank можно получить с помощью PHP-скрипта pagerank.php, использующего алгоритма расчета разработанный Google Community. Скачайте скрипт и сохраните у себя на сайте. Пример использования смотрите ниже:

<?php  
require('pagerank.php');

$url = "www.tigir.com";
echo "PageRank страницы ".$url.": ".getrank($url); ?>

Страница с описанием скрипта на английском - Google PR Calculator - Free PHP PageRank Script.

Как вычислить ETag как в Apache?

function get_file_etag($filename)
{
  return sprintf('%x-%x-%x', fileinode($filename), filesize($filename), filemtime($filename) );
}

См. так же в FAQ - Разное вопрос: "Для чего нужен ETag заголовок HTTP, который выдает Apache и как он формируется?"

Как использовать в качестве callback функции метод объекта?

Многие функции PHP (array_map, array_filter, array_reduce, array_walk ...) принимают в качестве параметра функцию обратного вызова (callback-функцию). Чтобы передать встроенную или определенную пользователем функцию как callback, нужно просто передать её имя.

function my_func()
{
...
}

$a = array_map('my_func', $arr);

Но в качестве callback-функций могут быть использованы не только простые функции, а также методы объектов, и статические методы классов. Чтобы передать в качестве callback-функции метод объекта (именно объекта, который созданн посредством оператора new), нужно передать массив вида: array(&$obj, "имя метода"). Оператор ссылки (&) при использовании метода объекта в качестве callback-функций обязателен только в PHP4, в PHP5 оператор ссылки (&)не нужен.

class MyClass
{
   function my_func()
   {
       ...
   }
}

$obj = new MyClass();
$a = array_map(array(&$obj, 'my_func'), $arr);

В случае статического метода класса, вместо объекта используется имя класса: array("имя класса", "имя метода").

$a = array_map(array('MyClass', 'my_func'), $arr);

Как определить IP-адрес пользователя учитывая прокси-сервер?

function getip()
{
  if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"),"unknown"))
    $ip = getenv("HTTP_CLIENT_IP");

  elseif (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
    $ip = getenv("HTTP_X_FORWARDED_FOR");

  elseif (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
    $ip = getenv("REMOTE_ADDR");

  elseif (!empty($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
    $ip = $_SERVER['REMOTE_ADDR'];
  
  else
    $ip = "unknown";
  
  return($ip);
}

Как узнать имя функции php?

Во время выполнения функции становится доступной предопределенная константа __FUNCTION__, содержащая имя функции.

<?
function my_func()
{
	echo __FUNCTION__;
}
my_func();
?>

В результате работы скрипта будет выведена строка "my_func".

См. так же: пять волшебных констант PHP

Как определить выполняется ли скрипт под Windows или нет?

Данную информацию можно получить и из константы PHP_OS, которая указывает на ОС, под которой производилась сборка PHP.

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')
{
//Win
}
else
{
//другая ОС
}

Чтобы узнать ОС на которой выполняется интерпретатор PHP в данный момент используйте функцию php_uname, которая, к тому же, возвращает информацию об операционной системе в более полном виде, что так же может понадобиться.

Ещё одним способом, с помощью которого можно определить операционную систему, является использование переменных окружения специфичных для данной ОС. Например, во всех версиях Windows присутствует переменная среды окружения с именем COMSPEC, содержащая путь до командного интерпретатора (cmd.exe или command.com), следовательно присутствие данной переменной среды позволяет определить, где запущен сценарий.

if (getenv('COMSPEC'))
{
//Win
}
else
{
//другая ОС
}

Как отменить магическое действие magic quotes?

При включенной директиве конфигурации magic_quotes_gpc PHP автоматически добавляет слеши к строковым значениям в массиве $GLOBALS (это относится не только к данным в $_POST, $_GET, $_COOKIE, $_REQUEST, но и к данным в $_SERVER, $_FILES, $_ENV, $_SESSION). В добавок, при включенной директиве magic_quotes_runtime, слеши добавляются к данным полученым во время работы скрипта (например, из файла, базы данных). И как показывает практика, зачастую, эта магия оказывается "медвежьей" услугой. Проще всего, конечно, отключить директивы в php.ini или через .htaccess, прописав php_flag magic_quotes_gpc 0 и php_flag magic_quotes_runtime 0, однако если нужно создать приложение, которое независит от настроек PHP, тогда нужно выполнить ряд антимагических действий вручную. С magic_quotes_runtime все просто, для его отключения в начале скрипта прописываем set_magic_quotes_runtime(0); и все, а для magic_quotes_gpc нужны заклинания более суровые: нужно проверить состояние директивы magic_quotes_gpc и если она включена, пробежаться по глобальным массивам и сделать stripslashes, например так как показано ниже.

if ( get_magic_quotes_gpc() ) {
   function stripslashes_deep($value) {
       if( is_array($value) )
       {
          $value = array_map('stripslashes_deep', $value)
       }
       elseif ( !empty($value) && is_string($value) )
       {
          $value = stripslashes($value);
       }
       return $value;
   }

   $_GET     = stripslashes_deep($_GET);
   $_POST    = stripslashes_deep($_POST);
   $_COOKIE  = stripslashes_deep($_COOKIE);
   $_REQUEST = stripslashes_deep($_REQUEST);
   $_SESSION = stripslashes_array($_SESSION);
   $_SERVER  = stripslashes_deep($_SERVER);
   $_FILES   = stripslashes_deep($_FILES);
   $_ENV     = stripslashes_deep($_ENV);
}

P.S.: В 6 версии PHP от магических закавычиваний отказались и оставленные в целях обратной совметимости get_magic_quotes_gpc и get_magic_quotes_runtime будут всегда возвращать false.

Как получить список всех локалей сервера (locale, locale linux, freebsd locale, php locale, russian locale)?

Для Linux

<?php
//для вывода всех локалей 
system('locale -a'); 
//для вывода русских локалей 
system('locale -a  | grep ru');
?>

Для FreeBSD

<?php
//для вывода всех локалей 
system('ls /usr/share/locale'); 
//для вывода русских локалей
system('ls /usr/share/locale | grep ru');
?>

PHP список файлов

Список файлов в директории

scandir - Получить список файлов и каталогов в отсортированном виде (по умолчанию, сортировка в алфавитном порядке по возрастанию). Функция появилась в PHP5.

$file_list = scandir('/tmp');
// или для сортировки по убыванию так: $files2 = scandir($dir, 1);
 
/* Результатом будет нечто вроде:
Array (
      [0] => .
      [1] => ..
      [2] => bar.php
      [3] => foo.txt
      [4] => somedir
)
*/

Если ещё используете PHP4, то смотрим в сторону opendir, readdir или dir.

Список файлов с определенным расширением

glob - Функция glob() ищет все пути, совпадающие с заданным шаблоном (функция поддерживает различные флаги - смотрим документацию).

$file_list = glob("./img/*.png"); // получить все PNG файлы из каталога ./img