Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: По мотивам удаленной темы в разделе 'задачи'
 
 автор: Trianon   (07.11.2010 в 18:31)   письмо автору
 
 

Ну, граждане алкоголики, хулиганы, тунеядцы, программисты, а также и примкнувшие к ним романтики ножа и топора мускуля и апача, кто хочет сегодня поработать показать удаль молодецкую?

Не желает ли кто-нибудь из вас посоревноваться в совершенно бесполезном занятии - написании интроспективных программ (программ, печатающих один-в-один собственный исходник) ?

Неужели ни у кого даже край извилины не зашевелился на предмет того, чтобы попробовать?

  Ответить  
 
 автор: psychomc   (07.11.2010 в 19:05)   письмо автору
 
   для: Trianon   (07.11.2010 в 18:31)
 

сам исполняемый файл программы нельзя использовать?

  Ответить  
 
 автор: Trianon   (07.11.2010 в 19:22)   письмо автору
 
   для: psychomc   (07.11.2010 в 19:05)
 

на чтение?
нет конечно :)

  Ответить  
 
 автор: psychomc   (07.11.2010 в 20:17)   письмо автору
 
   для: Trianon   (07.11.2010 в 19:22)
 

тогда надо подумать :)

  Ответить  
 
 автор: neadekvat   (07.11.2010 в 20:32)   письмо автору
 
   для: Trianon   (07.11.2010 в 18:31)
 

*сказал лишнее*

Хотя, боюсь, не смогу воспроизвести такую даже для php :) Хм.

  Ответить  
 
 автор: Trianon   (07.11.2010 в 20:40)   письмо автору
 
   для: neadekvat   (07.11.2010 в 20:32)
 

Понимаю, что с непривычки задача кажется жутко страшной.
Но на самом деле - решается :)

Я тут придумал разной степени сложности ограничения:
1. произвольно
2. без sprintf'оподобных стандартных функций
3. без стандартных функций (можно пользоваться только примитивами strlen, count, chr, ord )
4. без стандартных функций вообще.

и ничего так. Решается :))

  Ответить  
 
 автор: sim5   (07.11.2010 в 20:49)   письмо автору
 
   для: Trianon   (07.11.2010 в 18:31)
 

Печатать в смысле свое, как разработчик, сразу на принтер, или отдавать в файл для печати?

  Ответить  
 
 автор: Trianon   (07.11.2010 в 20:52)   письмо автору
 
   для: sim5   (07.11.2010 в 20:49)
 

выводить в стандартный выходной поток.
в терминах php - echo

  Ответить  
 
 автор: sim5   (07.11.2010 в 20:53)   письмо автору
 
   для: Trianon   (07.11.2010 в 20:52)
 

Тьфю..... вот косноязычность языков программирования, когда понятие печать имеет другой, сексуальный, оттенок, и не поймешь о чем просят. :)

  Ответить  
 
 автор: Trianon   (07.11.2010 в 20:56)   письмо автору
 
   для: sim5   (07.11.2010 в 20:53)
 

для адептов строгих формулировок был оставлен термин "интроспективный"

  Ответить  
 
 автор: sim5   (07.11.2010 в 20:58)   письмо автору
 
   для: Trianon   (07.11.2010 в 20:56)
 

Интроспекция (лат. introspecto, смотрю внутрь) — метод, позволяющий иметь представления о своей сущности: структуре, организации и т.п.
Как-то неоднозначно все равно. Я думал печать на принтере, уже было извилины беспокоить начал, а тут.... в общем интерес пропал. :)

  Ответить  
 
 автор: Trianon   (07.11.2010 в 21:01)   письмо автору
 
   для: sim5   (07.11.2010 в 20:58)
 

печать на принтере в вырожденном варианте подходящего принтера выполняется путем запуска
php.exe -f file.php >lpt1


в менее вырожденном - обеспечивается драйверами этого самого принтера.
писать драйвер никто не предлагает, это скучно, в конце концов. :)))

  Ответить  
 
 автор: sim5   (07.11.2010 в 21:04)   письмо автору
 
   для: Trianon   (07.11.2010 в 21:01)
 

Ну что это такое: php.exe -f file.php >lpt1... это не документ, это его зарисовка, я думал действительно - шрифты, сопутствующий цвет и т.п...
Не надо писать драйвер, под Win есть функции работы с принтером.

  Ответить  
 
 автор: psychomc   (07.11.2010 в 21:20)   письмо автору
 
   для: sim5   (07.11.2010 в 20:58)
 

зато в контексте с программой однозначно

Задача состоит в написании программы, которая в ходе своей работы выводит на экран либо в файл свой исходный код. Само собой разумеющееся, нельзя использовать файл с кодом или системную информацию, например адрес ячейки памяти, возможно содержащей данный код.

Такая программа называется интроспективной. Также существует теорема, которая гласит, что возможно написать такую программу на любом языке программирования.

http://habrahabr.ru/tag/%D0%B8%D0%BD%D1%82%D1%80%D0%BE%D1%81%D0%BF%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%B0%D1%8F%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0/

  Ответить  
 
 автор: Trianon   (07.11.2010 в 21:27)   письмо автору
 
   для: psychomc   (07.11.2010 в 21:20)
 

вместо того, чтоб давать ссылку в таком виде, который окно в горизонтальный скроллинг рвет, лучше бы пример решения привели.

  Ответить  
 
 автор: psychomc   (07.11.2010 в 22:24)   письмо автору
 
   для: Trianon   (07.11.2010 в 21:27)
 

а можно так? :)

файл index.php

<?php 
require("index2.php")
?>


файл index2.php

<?php
echo 
nl2br(htmlspecialchars('<?php 
require("index2.php")
?>'
));
?>

  Ответить  
 
 автор: Trianon   (07.11.2010 в 23:09)   письмо автору
 
   для: psychomc   (07.11.2010 в 22:24)
 

1. все эти nl2br и htmlspecialchars - лишние. Поскольку сверяется тело отклика (Исх код HTML в терминах браузера)
2.читать прямо или косвенно файл, как я уже сказал, недопустимо.
Нужно чтобы алгоритм скрипта формировал собственный код самостоятельно, а не читал первоисточник.

  Ответить  
 
 автор: psychomc   (07.11.2010 в 23:31)   письмо автору
 
   для: Trianon   (07.11.2010 в 23:09)
 

я то думал, что это не подпадает под ограничения. тем более ведь require это оператор, а не функция :)

  Ответить  
 
 автор: Trianon   (07.11.2010 в 23:53)   письмо автору
 
   для: psychomc   (07.11.2010 в 23:31)
 

В самом общем ключе функциями пользоваться можно.
Файл исходника читать нельзя.
Можете считать, что php запущен через pipe, и файла с исходником нет как такового.

  Ответить  
 
 автор: sim5   (07.11.2010 в 22:21)   письмо автору
 
   для: psychomc   (07.11.2010 в 21:20)
 

Я уже сказал, мне такое не интересно. ;-)

  Ответить  
 
 автор: mihdan   (07.11.2010 в 22:48)   письмо автору
 
   для: Trianon   (07.11.2010 в 18:31)
 


<?php
/* some code here */
show_source(__FILE__);    
?>

  Ответить  
 
 автор: psychomc   (07.11.2010 в 22:53)   письмо автору
 
   для: mihdan   (07.11.2010 в 22:48)
 

это однозначно читерство.
с таким же успехом можно сделать echo file_get_contents(__FILE__);

  Ответить  
 
 автор: Trianon   (07.11.2010 в 23:10)   письмо автору
 
   для: mihdan   (07.11.2010 в 22:48)
 

в третий раз.
читать источник нельзя по условиям.
Ни __FILE__ ни PHP_SELF ни прочие эквиваленты.

Читать файл как таковой - можно, если уж так хочется (хотя , как показывает опыт, не нужно).
Но перед этим в него нужно сперва записать.

  Ответить  
 
 автор: deimand   (08.11.2010 в 00:07)   письмо автору
 
   для: Trianon   (07.11.2010 в 18:31)
 

а где должен выводиться этот код? в начале html страницы или в конце, или как ? чет не очень понятно.

можно тупо писать код в виде строк, которые потом выполнять и их же на экран выводить. только появляется одна большая заморочка - подсветка синтаксиса уже не к черту.

  Ответить  
 
 автор: Trianon   (08.11.2010 в 00:08)   письмо автору
 
   для: deimand   (08.11.2010 в 00:07)
 

выводиться должен (будучи запущенным через браузер) в качестве кода html-страницы.
Не перед, не после, а вместо.
<?php 
   
echo '<?php  
   ....
    ?>'
;

?>
Понятно, что браузер, вероятнее всего, нарисует белое окно - суть не в этом.
И уверяю Вас, задача и без подсветки решается ой как небыстро. :)

  Ответить  
 
 автор: deimand   (08.11.2010 в 00:19)   письмо автору
 
   для: Trianon   (08.11.2010 в 00:08)
 

>выводиться должен (будучи запущенным через браузер) в качестве кода html-страницы.

тогда зачем такого рода скрипты вообще запускать, если единственная смысловая нагрузка - показ исходного кода.

если скрипт не имеет результата работы, из чего по вашему он должен состоять?

задача из жанра "попробуй написать такой код, чтоб в браузер ничего не пролезло"
ответ видимо "ничего писать и не надо"

  Ответить  
 
 автор: Trianon   (08.11.2010 в 00:25)   письмо автору
 
   для: deimand   (08.11.2010 в 00:19)
 

Полезть должно из php-процесса, в браузере результат виден по команде "исх.код HTML"..
Практической пользы у этого класса задач нету никакой, и в исходном посте я об этом предупредил.
Но пищу для ума они дают, будьте-нате.
Маситиые зубры вообще решают мультиязыковую задачу.
программа на С генерирует исходник на руби.
программа на руби генерирует исходник на C#
программа на C# генерирует исходник на хаскеле
программа на хаскеле генерирует начальный исходник на С
Это кольцо в 4 шага, а были корифеи, знавшие (и закольцовывавшие) десятки языков.
Зачем они это делают?

  Ответить  
 
 автор: deimand   (08.11.2010 в 00:27)   письмо автору
 
   для: Trianon   (07.11.2010 в 18:31)
 

не возможно.

это

<?php
  
echo '<?php
          echo "";
       ?>'
;
?>

покажет в исходном коде это

<?php
  
echo "";
?>


исходный код браузера вседа будет на пару строк отличаться. а задача, как вы ее трактуете - выдать один в один.

  Ответить  
 
 автор: Trianon   (08.11.2010 в 00:29)   письмо автору
 
   для: deimand   (08.11.2010 в 00:27)
 

Так в том то и соль, чтобы написать так, чтоб исходник совпадал с выдачей побайтово.
и это возможно :)

Какой мне смысл обманывать?
и карты раскрывать сразу смысла никакого. Может кого зацепит, и он согласится голову пломать.

  Ответить  
 
 автор: deimand   (08.11.2010 в 00:31)   письмо автору
 
   для: Trianon   (08.11.2010 в 00:29)
 

то есть смысл задачи именно это недоразумение и обойти?

нужно написать одну функцию, кажется. завтра обязательно попробую :)

  Ответить  
 
 автор: deimand   (08.11.2010 в 01:06)   письмо автору
 
   для: Trianon   (08.11.2010 в 00:29)
 

ну а подсказки будут?

я думаю что нужно создать строку функции рекурсии, которая при исполнении функцией eval эту рекурсию остановит, функция должна быть заточена на вывод самой себя с некоторыми изменениями в случае этой самой остановки. так мне кажется только потому, что все языки программирования должны иметь функцию eval.

  Ответить  
 
 автор: Trianon   (08.11.2010 в 01:24)   письмо автору
 
   для: deimand   (08.11.2010 в 01:06)
 

Большинство языков функцию eval не имеют, ибо компилируемые, а не интерпретируемые.
Те три или четыре варианта кода, которые я сегодня обтачивал, этой функцией не пользовались- ни один.

Но мыслите в верном направлении, просто без eval можно и обойтись :)

  Ответить  
 
 автор: Гость   (08.11.2010 в 05:02)   письмо автору
 
   для: Trianon   (08.11.2010 в 01:24)
 

думаю следует думать в направление функции с "рекурсией" (один раз ) ). Вечером попробую

  Ответить  
 
 автор: Trianon   (08.11.2010 в 08:38)   письмо автору
 
   для: Гость   (08.11.2010 в 05:02)
 

замечательно.
Двое уже есть.
Я надеюсь, что neadekvat передумает и всё ж тоже подключится.

  Ответить  
 
 автор: neadekvat   (08.11.2010 в 13:41)   письмо автору
 
   для: Trianon   (07.11.2010 в 18:31)
 

Набросал сначала самое простое (надо ж отчего-то отталкиваться):
<?php
$a 
'<?php
$a = %s;
printf($a, $a);'
;
printf($a$a);

Одна проблема, пока не знаю, как решить - кавычек после печати, увы, нет

  Ответить  
 
 автор: Trianon   (08.11.2010 в 13:43)   письмо автору
 
   для: neadekvat   (08.11.2010 в 13:41)
 

начало доброе. Допиливайте :)

  Ответить  
 
 автор: neadekvat   (08.11.2010 в 13:47)   письмо автору
 
   для: Trianon   (08.11.2010 в 13:43)
 

<?php 
$a 
'<?php 
$a = "%s"; 
printf($a, $a);'

printf($a$a);

Вот уже с кавычками, но теперь они меняются с одинарных на парные

  Ответить  
 
 автор: neadekvat   (08.11.2010 в 13:51)   письмо автору
 
   для: neadekvat   (08.11.2010 в 13:47)
 

Вот, теперь как надо, кажется:
<?php 
$a 
'<?php 
$a = %c%s%c; 
printf($a, 39, $a, 39);'

printf($a39$a39);

  Ответить  
 
 автор: Trianon   (08.11.2010 в 14:08)   письмо автору
 
   для: neadekvat   (08.11.2010 в 13:51)
 

по первой ступени - зачОт :)

  Ответить  
 
 автор: neadekvat   (08.11.2010 в 14:38)   письмо автору
 
   для: Trianon   (08.11.2010 в 14:08)
 

<?php
$a 
'<?php
$a = '
$b 'echo $a, chr(39), $a, chr(39), chr(59), chr(32), chr(36), chr(98), chr(32), chr(61), chr(32), chr(39), $b, chr(39), chr(59), chr(10), $b;';
echo 
$achr(39), $achr(39), chr(59), chr(32), chr(36), chr(98), chr(32), chr(61), chr(32), chr(39), $bchr(39), chr(59), chr(10), $b;

  Ответить  
 
 автор: Trianon   (08.11.2010 в 14:48)   письмо автору
 
   для: neadekvat   (08.11.2010 в 14:38)
 

грязно.
из за символов конца строки.

  Ответить  
 
 автор: neadekvat   (08.11.2010 в 14:51)   письмо автору
 
   для: Trianon   (08.11.2010 в 14:48)
 

Не совсем понял, о чем вы

  Ответить  
 
 автор: Trianon   (08.11.2010 в 15:07)   письмо автору
478 байт
 
   для: neadekvat   (08.11.2010 в 14:51)
 

см.аттач.

Но вообще Вам респект и уважуха, так сказать:)

PS. (для других участников родео.)
Господа, публикуйте, пожалуйста, свои версии.
Вот мои скрипты на скрипты лидера совершенно непохожи, вероятно у Вас будет совсем по-другому!

  Ответить  
 
 автор: Drago   (08.11.2010 в 16:23)   письмо автору
 
   для: Trianon   (08.11.2010 в 15:07)
 

<?php
$s 
'echo "<?php\n\$s = ".chr(39).$s.chr(39).";\n$s";';
echo 
"<?php\n\$s = ".chr(39).$s.chr(39).";\n$s";


Мне вот интересно, без функции chr() можно обойтись?

  Ответить  
 
 автор: Trianon   (08.11.2010 в 16:27)   письмо автору
 
   для: Drago   (08.11.2010 в 16:23)
 

Тоже неплохо. Хотя переносы строк тоже неидеальны.


>Мне вот интересно, без функции chr() можно обойтись?

я обошелся. Вообще без единой встроенной.
Правда мне пришлось написать свою.

  Ответить  
 
 автор: root   (08.11.2010 в 16:30)   письмо автору
 
   для: Trianon   (08.11.2010 в 16:27)
 

<?php
$m
;$s='<?php
$m;
echo substr(str_replace(chr(36)."m;",chr(36)."m;".chr(36)."s=".chr(39).$s.chr(39).";",$s),0);
?>'
;
echo 
substr(str_replace(chr(36)."m;",chr(36)."m;".chr(36)."s=".chr(39).$s.chr(39).";",$s),0);
?>

  Ответить  
 
 автор: Trianon   (08.11.2010 в 16:32)   письмо автору
 
   для: root   (08.11.2010 в 16:30)
 

неопределенная переменная, нет разве?

  Ответить  
 
 автор: root   (08.11.2010 в 16:35)   письмо автору
 
   для: Trianon   (08.11.2010 в 16:32)
 

O.o
Мне ничего такого не сказало, но у меня под IIS'ом.. )).

  Ответить  
 
 автор: Trianon   (08.11.2010 в 16:37)   письмо автору
 
   для: root   (08.11.2010 в 16:35)
 

мне тоже ничего не сказало :) Но ведь неопределенная?

  Ответить  
 
 автор: root   (08.11.2010 в 16:38)   письмо автору
222 байт
 
   для: Trianon   (08.11.2010 в 16:37)
 

>Но ведь неопределенная?

это факт ))

можно поменять на $m=0

  Ответить  
 
 автор: Drago   (08.11.2010 в 16:38)   письмо автору
 
   для: Trianon   (08.11.2010 в 16:27)
 

>Тоже неплохо. Хотя переносы строк тоже неидеальны.

Чесно говоря, это легко исправляется. Просто не хотелось пихать chr() всюду. Портит внешний вид, знаете ли. :)

>>Мне вот интересно, без функции chr() можно обойтись?
>
>я обошелся. Вообще без единой встроенной.
>Правда мне пришлось написать свою.

Я так понимаю это был исключительно принципиальный шаг?

  Ответить  
 
 автор: Trianon   (08.11.2010 в 16:55)   письмо автору
 
   для: Drago   (08.11.2010 в 16:38)
 

>>>Мне вот интересно, без функции chr() можно обойтись?
>>я обошелся. Вообще без единой встроенной.
>>Правда мне пришлось написать свою.

>Я так понимаю это был исключительно принципиальный шаг?

знать бы )))
Вот код:

<?php

  
function a($l$r$x)
  { 
$q "'"$e '\\';
    for(
$i 0$i $r$i++)
    {
      if(
$i+$l == $r)
      {
          echo 
$q;
          for(
$j 0$j $r$j++)
          {
            if(
$x[$j] == $q || $x[$j] == $e)  echo $e;
          echo 
$x[$j];
        }
           echo 
$q;
      }
      echo 
$x[$i];
    }
  }

 
a(10366,
'<?php

  function a($l, $r, $x)
  { $q = "\'"; $e = \'\\\\\';
    for($i = 0; $i < $r; $i++)
    {
      if($i+$l == $r)
      {
          echo $q;
          for($j = 0; $j < $r; $j++)
          {
            if($x[$j] == $q || $x[$j] == $e)  echo $e;
          echo $x[$j];
        }
           echo $q;
      }
      echo $x[$i];
    }
  }

 a(10, 366,

);
?>
'
);
?>


Чем этот код примечателен, так это тем, что насквозь кондовый, без изюминок, просто написан в лоб.

  Ответить  
 
 автор: Drago   (08.11.2010 в 17:04)   письмо автору
739 байт
 
   для: Trianon   (08.11.2010 в 16:55)
 

У меня в выводе вызов функции потерялся. :(

  Ответить  
 
 автор: Trianon   (08.11.2010 в 17:14)   письмо автору
7.6 Кб
 
   для: Drago   (08.11.2010 в 17:04)
 

поклёп.
см. аттач.

  Ответить  
 
 автор: Root   (08.11.2010 в 17:20)   письмо автору
18.2 Кб
 
   для: Trianon   (08.11.2010 в 17:14)
 

Drago прав, в двух местах не совпадает.

  Ответить  
 
 автор: Drago   (08.11.2010 в 17:21)   письмо автору
 
   для: Root   (08.11.2010 в 17:20)
 

При копи-пасте с форума, функция не работает, увы.

  Ответить  
 
 автор: Trianon   (08.11.2010 в 17:25)   письмо автору
 
   для: Drago   (08.11.2010 в 17:21)
 

там наверняка дело в завершающем конце строки.
Функция тупо ориентирована на жесткую длину файла.
И таки да - на RFC-шные CRLF
Последнее можно было бы переделать, но раздувать и без того "не самый короткий" код желания не было. :)

  Ответить  
 
 автор: sim5   (08.11.2010 в 19:33)   письмо автору
 
   для: Trianon   (08.11.2010 в 17:25)
 

Все таки расшевелили "улей"? ))

  Ответить  
 
 автор: Trianon   (08.11.2010 в 22:09)   письмо автору
 
   для: sim5   (08.11.2010 в 19:33)
 

ненуачо?

кто-то недоволен? :)))

  Ответить  
 
 автор: sim5   (08.11.2010 в 22:19)   письмо автору
 
   для: Trianon   (08.11.2010 в 22:09)
 

Нет, почему, Фсе по науке )

>Ну, граждане алкоголики, хулиганы, тунеядцы

То есть "трутни", зажужжали.... :)

  Ответить  
 
 автор: Trianon   (08.11.2010 в 22:34)   письмо автору
 
   для: sim5   (08.11.2010 в 22:19)
 

для относительно непростой головоломки, и после продолжительного перерыва, в отсутствие призового фонда и начальника транспортного цеха опять же отклик вполне себе неплохой, я считаю :)

  Ответить  
 
 автор: Николай2357   (09.11.2010 в 08:36)   письмо автору
 
   для: Trianon   (08.11.2010 в 22:34)
 

Ну и я туда же в калашный ряд )))
Не дотянул совсем без функций, но зато не списывал:
<?php

    $a 
chr(39); 

class 
Example  
{  

    private 
$clone

    public function 
__construct($text$a
    { 
        echo 
'<?php'$text
        
$this->$a
        
$this->clone $text
    }  

    public function 
__clone()   
    {      
        echo 
'    $obj = new Example('$this->addslashes($this->clone) . $this->.', $a);
  
    clone $obj;'
;             
    }  

    
$obj = new Example('

    $a = chr(39); 

class Example  
{  

    private $clone; 

    public function __construct($text, $a) 
    { 
        echo \'<?php\' .$text; 
        $this->a = $a; 
        $this->clone = $text; 
    }  

    public function __clone()   
    {      
        echo \'    $obj = new Example(\'. $this->a . addslashes($this->clone) . $this->a .\', $a);
  
    clone $obj;\';             
    }  

'
$a);
  
    clone 
$obj;

  Ответить  
 
 автор: Trianon   (09.11.2010 в 14:05)   письмо автору
 
   для: Николай2357   (09.11.2010 в 08:36)
 

мамо... класс... объект... мамо, роди меня обратно срочччно!!

:)))

не, ну что я скажу, достойный экземпляр :))

насчет "не списывал" - верю :)


------
.покажу-ка я еще варианты, которые пришли в голову перед тем, как я затеял всю эту бучу.

вариант со sprintf практически совпал с тем, что показал neadekvat, разве только закрывающий ?> был на месте.

вариант без форматных преобразований , но с str_replace
<?php

  
function a($x) {    echo str_replace(chr(35), chr(0x27).$x.chr(0x27), $x) ; }

  
$v =
'<?php

  function a($x) {    echo str_replace(chr(35), chr(0x27).$x.chr(0x27), $x) ; }

  $v =
#;
 a($v);
?>
'
;
 
a($v);
?>



вариант без строковых функций

<?php

  
function a($x) {
    for(
$i 0$i strlen($x); $i++)
    echo 
$x[$i] == chr(35) ? chr(0x27).$x.chr(0x27) : $x[$i];   }

  
$v =
'<?php

  function a($x) {
    for($i = 0; $i < strlen($x); $i++)
    echo $x[$i] == chr(35) ? chr(0x27).$x.chr(0x27) : $x[$i];   }

  $v =
#;
 a($v);
?>
'
;
 
a($v);
?>


ну а вариант без функций вообще - это тот самый тяжеловес, который я показал (08.11.2010 в 16:55)

  Ответить  
 
 автор: Trianon   (08.11.2010 в 17:24)   письмо автору
361 байт
 
   для: Root   (08.11.2010 в 17:20)
 

так... а если я файл аттачем прикреплю, проверьте, плиз?

  Ответить  
 
 автор: Drago   (08.11.2010 в 17:25)   письмо автору
 
   для: Trianon   (08.11.2010 в 17:24)
 

А вот так работает. :)

  Ответить  
 
 автор: root   (08.11.2010 в 17:26)   письмо автору
 
   для: Trianon   (08.11.2010 в 17:24)
 

да, так одинаково.

  Ответить  
 
 автор: deimand   (09.11.2010 в 01:10)   письмо автору
481 байт
 
   для: Trianon   (08.11.2010 в 17:24)
 

я забираю свои слова назад по поводу невозможности :)
<?php
 
function a($b)
 {
   
$c str_replace("\\""\\\\"$b);
   
$d str_replace("'""\'"$c);
   return 
$d;
 }
 
$e '; echo $i . $f . a($i) . $f . $e; ?>';
 
$f "'";
 
$g "\\";
 
$h "?>";
 
$i '<?php
 function a($b)
 {
   $c = str_replace("\\\\", "\\\\\\\\", $b);
   $d = str_replace("\'", "\\\'", $c);
   return $d;
 }
 $e = \'; echo $i . $f . a($i) . $f . $e; ?>\';
 $f = "\'";
 $g = "\\\\";
 $h = "?>";
 $i = '
; echo $i $f a($i) . $f $e?>

и тоже хотел бы посмотреть еще варианты реализации.
на всякий случай аттач.

  Ответить  
 
 автор: deimand   (09.11.2010 в 01:24)   письмо автору
 
   для: deimand   (09.11.2010 в 01:10)
 

$h = "?>"; вообще лишнее

  Ответить  
 
 автор: RMW   (08.11.2010 в 15:58)   письмо автору
 
   для: Trianon   (07.11.2010 в 18:31)
 

JS:

function a(){alert(a+'a()')}a()

  Ответить  
 
 автор: Trianon   (08.11.2010 в 16:09)   письмо автору
 
   для: RMW   (08.11.2010 в 15:58)
 

>function a(){alert(a

незачет.
применяется встроенная в язык интроспективность.
Фактически это аналогично чтению исходника.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования