Показать сообщение отдельно
Старый 12.03.2014, 12:43   #2
NameSpace
 
Регистрация: 21.12.2012
Сообщений: 146
Репутация: 52
По умолчанию

Q: Запустил пример 1, не понимаю. Что происходит?
A: print также, как и echo, является конструкцией. Запись print($a) === $b эквивалентна print (($a) === $b).

Q: Можно ли применить это для других целей, кроме анализа?
A: Вполне, например для создания закладки (backdoor) по принципу «Яйцо в утке, утка в зайце, заяц в шоке»
PHP код:
function abc () {
     
// ...

     
return $x 'true' 'false';
}

$eval '$tpl = ';

eval(
$eval abc() . ';'); 
memory_peak_usage() и memory_get_peak_usage() (?)

В статье я измерял показатели памяти с помощью memory_peak_usage(), memory_get_peak_usage() и пост-вызова:
PHP код:
register_shutdown_function(function() {
    echo 
memory_get_peak_usage(). " B\n";
}); 
Рассматривались версии 5.3 - 5.6, частично 5.2, однако, всё равно всё сложнее, чем кажется на самом деле.

В первую очередь, имеются различия памяти, занятой по умолчанию(memory_get...usage):
PHP код:
5.6 0.210M
5.5 
0.210M
5.4 
0.210M
5.3 
0.597M
5.2 
0.079M
5.1 
0.078M 
Основные тесты проводились на 5.4.6. Не имею возможности проверить на других: при переходных значениях аргументов, наблюдается странное поведение, когда на протяжении всей работы memory_get_peak_usage() < memory_limit, однако скрипт вываливается с ошибкой.
PHP код:
ini_set('memory_limit'A);

$pass str_repeat('a'1024 512);
$pass $pass;

echo 
memory_get_peak_usage(), "\n"// 1.6M 
Для выполнения операции необходимо целых 2.5M, ни байтом меньше, несмотря на то, что memory_get_peak_usage() = 1.6. Возможно каждый аргумент копируется лишний раз, возможно это неправильно-выполненные опережающие расчеты.

Потестим?

Последний раз редактировалось NameSpace; 12.03.2014 в 12:53..
NameSpace вне форума   Ответить с цитированием