Патент на изобретение велосипеда
Доделывал старому по просьбе старого клиента скрипт. Год эта доделка ему была не нужна, а теперь понадобилась. Дело всё происходит на заграничном хостинге. Германском, кажется.
Всё написал, закачиваю скрипт. Запрашиваю браузером — работает, но не всё. Скрипт простой. Очень. Ошибок нет, но чувство, что данные не читаются. У меня читаются, а там — нет. Обычная история.
Обвешиваю всё 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);
А потом просто подставил туда нужные мне значения.
Вопрос к присутствующим:
Комментарии 26
// а там врапперы для
? ;)
или
$f_opn = «f»."open";
$fp = $f_opn(«c:\Мои документы\master.passwd», «r»);
Warning: Cannot modify header information — headers already sent by (output started at /var2/home/bolk/public_html/comadd.php:15) in /var2/home/bolk/public_html/comadd.php on line 232
Warning: Cannot modify header information — headers already sent by (output started at /var2/home/bolk/public_html/comadd.php:15) in /var2/home/bolk/public_html/comadd.php on line 233
при добывлении коммента
Перечитал текс.
Или я туплю или ты его сам не читал ;)
Твой вопрос: require(«lib.jpg»);
Смотрим в тексте: «Испробовал call_user_func, $func(), include, require файлов с другими расширениями»
Твой вопрос: $f_opn = «f»."open"; $fp = $f_opn(«c:\Мои документы\master.passwd», «r»);
Смотрим в тексте: Запрещены вызовы целой кучи функций, в том числе call_user_func и
Мне казалось я всё написал.