作者: 閑舎
日時: 2007/9/20(23:21)
kbk@... (Bruce.) さん wrote.

> が、HTMLタグの処理をしているところだと思われますが(タグの種類によっては
> 別の部分を通りますが、img タグならここのはず)、
> 
> zend_language_parser.y
> 
> 	|	T_INLINE_HTML			{ zend_do_echo(&$1 TSRMLS_CC); }
> 
> と単に echo しているだけです。
> ...
> なので、ファイルのオープン(や存在確認)をしているところは通りません。

ソースまで見ていただき、ありがとうございます。どうやら flex & bison みた
いですが、私など最近この手のソースを見ることがないのでよくわかりません
(^^;。

もはやトラブルが起きたソースが失われていて、原因もよくわからないという状
態なので、あまり深く追及しないでくださいね。

ただ同じような目に遭った人がいたら何かわかるかもしれないな、という程度で
す。

私としては、

oya.php
<html>
<head>
...
<?php require("ko.php"); ?>

ko.php
<?php
function hoge() {
...
}
?>

みたいな使い方では面白くないので、反対をやってみようと思ったわけです。

oya.php
<?php
...(MySQL の処理など)
$var = "1";
$var2 = "2";
require("ko.php");
?>

ko.php
<html>
<head>
...
<?php
if (...) echo $var;
else echo $var2;
?>
...
<img src="...">
...
</html>

oya2.php で変数に違う値を代入して ko.php を require すると、ko.php 自体
は変わらないのに振舞が変わるので、一種 ko.php 自体がウェブページに関する
変換器と化し、きわめて簡単に作れるテンプレートとなるので面白いとどんどん
進んでいるうち、ソースがトリッキーになってしまったのかもしれません。

ただ、<img src="..."> 部分を除くだけで正常に戻ったのは事実です。ひょっと
したら、apache 側が php の出力結果をうまく扱えなくなるような、何らかの
PHP 自体とは別の理由があったのかもしれません。

--
本田博通(閑舎)
テキストとスクリプトの http://www.rakunet.org/TSNET/