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