Наука (говорит) о любви
Кобра-киллер
Вот оно:
ВОТ ПОГИБ ОН НА СЛУЖБЕ
И ОСТАЛАСЬ ЖЕНА ВДОВОЙ.
ЭТО БЫЛ МОЛОДОЙ ПАРНИШКА,
ОН ВЧЕРА НЕ ВЕРНУЛСЯ ДОМОЙ.
ХОРОНИЛИ ЕГО ВСЕМ ОТДЕЛОМ,
ЭТО БЫЛИ КРИК, ВОЙ И ПЛАЧ.
И ПРОЩАЛЬНЫМ САЛЮТОМ В ДОРОГУ,
ПРОВОДИЛИ НА ВЕКИ ЕГО.
НЕУЖЕЛИ НА ЭТОМ СВЕТЕ,
БУДУТ ВОЙНЫ, КРОВЬ И СМЕРТЬ.
НЕУЖЕЛИ НА ЭТОМ СВЕТЕ,
НЕ НАСТУПИТ ЕДИНЫЙ МИР.
Патент на изобретение велосипеда
Доделывал старому по просьбе старого клиента скрипт. Год эта доделка ему была не нужна, а теперь понадобилась. Дело всё происходит на заграничном хостинге. Германском, кажется.
Всё написал, закачиваю скрипт. Запрашиваю браузером — работает, но не всё. Скрипт простой. Очень. Ошибок нет, но чувство, что данные не читаются. У меня читаются, а там — нет. Обычная история.
Обвешиваю всё var_dump’ами и смотрю что у меня в переменных. Так и есть — на переменной $fp (результат функции fopen, язык — PHP), мне сообщают, что переменной такой нет. С сожалением сообщаю клиенту, что у него safe_mode, так что прочитать файл я просто не смогу.
«Сейчас свяжусь со службой поддержки» — на плохом английском заявляет клиент. Ок. Жду. От того, что он мне сообщил мне стало
Дальнейшее добыто из рук самой технической поддержки и моих попыток заставить это всё работать,
Оооо!!! В частности пострадали мои fopen, flock, fgets и fclose. Запрещены вызовы целой кучи функций, в том числе call_user_func и Клиент
Испробовал call_user_func, $func(), include, require файлов с другими расширениями, закачка в Z/gzip/bzip2 с распаковкой — ничего не получается. Кругом стена. Всё предусмотрели. Тут я вспоминаю, что в PHP существуют особые функции, которые умеют вызывать разные другие функции в качестве callback. После проверки оказалось, что система такие функции считает джентльменами — в смысле она им доверяет.
Вот тут мне карта и попёрла! Для начала я написал небольшую функцию, которая, пользуясь новообретённой дыркой, запускает нужные мне функции. Привожу её здесь с небольшим куском кода — вдруг пригодится, если упомянутый велосипед, не дай бог, найдёт широкое применение.
if (func_num_args() == 3) return NULL; $fp = Xec ('fopen', 'c:\\autoexec.bat', 'r');
function Xec ()
{
$comm = func_get_arg(0);
$args = array_slice(func_get_args(), 1);
return array_reduce($args, $comm); else
if (func_num_args() == 2)
{
array_map($comm, $args);
return $args[0];
}
}
echo Xec ('fgets', $fp, 1024);
Xec ('fclose', $fp);
А потом просто подставил туда нужные мне значения.
Вопрос к присутствующим: