Ограничить время выполнения скрипта 2 секундами и вывести на экран только первые 2000 символов
<?php
set_time_limit(2);
register_shutdown_function('shutdown');
ob_start();
/*
* echo ...
*/
function shutdown () {
echo substr(ob_get_clean(), 0, 2000);
}
Враппер для удобного использования ob_* функций
<?php
function ob($fn){
ob_start();
$fn();
return ob_get_clean();
}
$v = ob(function(){
echo "Hello, world!";
});
echo ">$v<";
>Hello, world!<
Замерить время выполнения участка кода
<?php
function bench($fn){
$start = microtime(true);
$fn();
return microtime(true) - $start;
}
echo bench(function(){ sleep(1); });
1.0001661777496
Распечатать информацию о переменной. В отличии от print_r, echo - var_dump нормально печатает булевы значения
<?php
$a = array(1, 2, array("a", "b", "c"));
var_dump($a);
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
}
}
$b = 3.1;
$c = true;
var_dump($b, $c);
float(3.1)
bool(true)
Включение отображения ошибок
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
Расширенная версия функции print_r, позволяет выводить массив до определенной глубины, а не полностью
/**
* Функция аналог print_r, за исключением того что выводит не всю глубину
* массива или объекта, а только указанную, возвращая строку с выводом.
*
* @param any $v переменная для вывода
* @param integer $maxdepth максимальная глубина,
* если $maxdepth < 0 - то глубина будет неограниченной
* @param integer $prepend_spaces количество пробелов перед строкой
* с текстом. Как правило использовать не нужно, будет работать само.
* @return string возвращает строку (в отличии от print_r не делает echo)
*/
function print_r_slice($v,$maxdepth=-1,$prepend_spaces=0)
{
$result = '';
if (is_array($v) || is_object($v))
{
if ($maxdepth!=0)
{
foreach($v as $key=>$val)
{
$result .= "\n".str_repeat(' ',$prepend_spaces) . ("[" . $key
. "] => " . print_r_slice($val,$maxdepth-1,
$prepend_spaces + strlen($key) + 6) );
}
}
else
{ $result .= " Array() "; }
}
else
{ $result .= $v; }
return $result;
}
Простая функция для замера скорости выполнения участков кода.
/**
* Простая функция для замера скорости выполнения участков кода.
* Для использования - написать tick_time("Операция такая-то") до начала измеряемого куска кода
* и tick_time("Следующая операция") или tick_time() после конца участка кода. В результате будет выведено
* количество секунд выполнения с точностью до 4-го знака.
* Пример:
* tick_time("Сканируем данные");
* scan_data();
* tick_time("Загружаем файл");
* load_file();
* tick_time("Анализируем информацию");
* $analyzer->dataAnalyze();
* tick_time();
* Выдаст в консоль (или в браузер)
* @param string $message - название операций которую мы измеряем. Используется просто для того чтобы знать.
*/
function tick_time($message=""){
static $lastMessage;
static $startTime;
if ($startTime){
echo "\n " . $lastMessage . ": " . ((int)((microtime(true) - $startTime)*10000))/10000 . "\n";
}
$startTime = microtime(true);
$lastMessage = $message;
}