

こんにちは。
今現在、htmlから外部PHPに書かれた関数を呼び出してhtml自分自身を整形しようと試みています。整形はタブ、改行、コメントを削除です。
the_html.htmlファイルの中身
//////////////////////
<?php
include_once("the_php.php");
func('the_html.html');
?>
<html lang="ja">
<head>
</head>
<body>
aaあ<br><br>
bbb<br><br>
ccc<br><br>
<!--コメント-->
</body>
</html>
//////////////////////
func.phpファイルの中身
//////////////////////
<?php
function func($html){
$fp=fopen($html, 'r');
if($fp){print('無事オープンしました');}else{print('オープンに失敗しました');}
$count = 0;
if($fp){
if(flock($fp, LOCK_SH)){
while(!feof($fp)) {
$buffer=fgets($fp);
$buffer=preg_replace('/(\t|\r\n|\r|\n)/s', '', $buffer);//タブ・改行を削除
$buffer=preg_replace('/<!--[\s\S]*?-->/s', '', $buffer);//コメントを削除
print($buffer);
$count++;
}
flock($fp, LOCK_UN);
}else{
print('ファイルロックに失敗しました');
}
}
fclose($fp);
}
?>
//////////////////////
表示させたthe_html.htmlのソース
//////////////////////
無事オープンしました<?phpinclude_once("the_php.php");a('the_html.html');?><html lang="ja"><head></head><body>aaあ<br><br>bbb<br><br>ccc<br><br></body></html>
<html lang="ja">
<head>
</head>
<body>
aaあ<br><br>
bbb<br><br>
ccc<br><br>
<!--コメント-->
</body>
</html>
//////////////////////
まぁ当然のことながら?整形していない自分自身も表示されてしまいます。
こうならない方法はあるものでしょうか?御教示下さい。よろしくお願い致します。
No.3ベストアンサー
- 回答日時:
>自分の希望としては、やはり本体html自身が外部PHPファイルを呼び出して、
>そこに書かれている処理によって自分を整形して表示することです。
まずは「the_html.html」つまり拡張しhtmlはphpを実行することができるよう
設定してあるんですか?
それができていないなら何をやっても無駄です。
で、できている前提で
>そこで1行ゲットできる関数がないのかと思いを巡らしています。
1行ゲットする意味がわかりません、1行ゲットしてもなんの解決にもならないし
1行ずつゲットしなくても解決できる内容ですよね?
変な話<!--から-->の間に改行がはいってたら即アウトですよね?
ほぼ繰り返しになりますが、以下ソース
//the_html.html
<?php
ob_start();
?>
<html lang="ja">
<head>
</head>
<body>
<!-- ここから -->
aaあ<br><br>
bbb<br><br>
<!-- ここまで改行するな -->
<!--コメント-->
</body>
</html>
<?php
$buffer=ob_get_contents();
ob_end_clean();
include_once "func.php";
?>
//func.php
<?PHP
$buffer=preg_replace('/(\t|\r\n|\r|\n)/s', '', $buffer);//タブ・改行を削除
$buffer=preg_replace('/<!--[\s\S]*?-->/s', '', $buffer);//コメントを削除
print $buffer;
?>
ご回答ありがとうございます。
htmlはphpを実行できる様にもちろんしてあります。おかげさまで出来る様になりました!ありがとうございました。
No.2
- 回答日時:
全体をob_start~ob_end_cleanでくくってしまえば
途中に何がはいっていてもバッファリングされますよね?
また一部だけバッファしたいのであれば、そこだけくくって
処理すればいいんだし、なにが問題なのかよくわかりませn。
<?php
$test=2;
ob_start();
?>
test1
<?PHP if($test==2){ ?>
test2ok
<?php }else{ ?>
test2ng
<?php } ?>
test3
<?PHP if($test==4){ ?>
test4ok
<?php }else{ ?>
test4ng
<?php } ?>
test5
<?php
$buffer=ob_get_contents();
ob_end_clean();
print $buffer;
?>
test6
更なるご回答ありがとうございます。
詳しくやりたいこととしては、
the_html.htmlファイルの中身
//////////////////////
<?php
ob_start();
?>
<html lang="ja">
<head>
</head>
<body>
<!-- ここから -->
aaあ<br><br>
bbb<br><br>
<!-- ここまで改行するな -->
<!--コメント-->
</body>
</html>
<?php
$buffer=ob_get_contents();
ob_end_clean();
$buffer=preg_replace('/(\t|\r\n|\r|\n)/s', '', $buffer);//タブ・改行を削除
$buffer=preg_replace('/<!--[\s\S]*?-->/s', '', $buffer);//コメントを削除
print $buffer;
?>
//////////////////////
の時に、出力のソースとして下記になりたいのです。
//////////////////////
<html lang="ja"><head></head><body>
aaあ<br><br>
bbb<br><br>
</body></html>
//////////////////////
そこで
$buffer=preg_replace('/(\t|\r\n|\r|\n)/s', '', $buffer);//タブ・改行を削除
$buffer=preg_replace('/<!--[\s\S]*?-->/s', '', $buffer);//コメントを削除
print $buffer;
を外部PHPの関数呼び出しで処理しようとしているのですが、うまくいきません。そこで1行ゲットできる関数がないのかと思いを巡らしています。
No.1
- 回答日時:
たんに出力をバッファリングして整形してから出力すればいいのでは?
こんな感じ?
<?php
ob_start();
//以下本文
?>
<html lang="ja">
<head>
</head>
<body>
aaあ<br><br>
bbb<br><br>
ccc<br><br>
<!--コメント-->
</body>
</html>
<?php
//本文ここまで
$buffer=ob_get_contents();
ob_end_clean();
//ここから
$buffer=preg_replace('/(\t|\r\n|\r|\n)/s', '', $buffer);//タブ・改行を削除
$buffer=preg_replace('/<!--[\s\S]*?-->/s', '', $buffer);//コメントを削除
print $buffer;
//ここまでは外部関数にしてもOK
詳しい説明付きのご回答ありがとうございます。
ご提示の方法で、私のサンプルにあげたhtmlはやることが出来ました。
ただ、更に新しくhtml内で
htmlの内容
///////////////
~~~
<body>
~~~
<!-- ここから -->
<?php ~~~ ?>
~~~
<?php else: ?>
~~~
<?php endif; ?>
<!-- ここまで改行するな -->
~~~
</body>
<?php
//本文ここまで
$buffer=ob_get_contents();
ob_end_clean();
func2($buffer);
?>
///////////////
として、外部phpのfunc2関数を呼び出して見ると、どうもob_get_contents関数はファイル全体を取得しているのですよね?ですのでphp内で「改行するな」というifを用いることが出来ませんでした。
fgetsみたいに1行ずつ取得する方法を御教示願えないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
includeでHTMLファイルを呼出し...
-
centos6のlogにscript not foun...
-
EZwebからphpのページを見るこ...
-
バッチを用いたフォルダの自動移動
-
FTPコマンドでディレクトリごと...
-
「クラス関数」「メンバ関数」...
-
PHPのif文でその処理を途中で抜...
-
Subversionのリポジトリの削除
-
PHPの文字化け
-
PHPで韓国語の表示がうまくいき...
-
Visual C++ 2005 Express Editi...
-
LoadLibraryの戻り値(HMODULE)...
-
インクルードした部分が表示さ...
-
mPDFでのPDF出力がうまくいかな...
-
HOSTSファイルについて
-
テキストリンクを2回クリックし...
-
mysql複数レコードをまとめて削...
-
phpにて、ipアドレスによる処理...
-
PHPから別なPHPへ移動(?)する方法
-
require_once()でファイルが読...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
nl2bの代用関数を何か知ってい...
-
htmlでphp(WordPress)を動かす
-
EZwebからphpのページを見るこ...
-
path文字列の操作
-
includeでHTMLファイルを呼出し...
-
階層が違う場合の絶対パス相対...
-
電通のタブーとは
-
botを作っているのですが、oaut...
-
「旭日中綬賞 」とはどんな賞で...
-
centos6のlogにscript not foun...
-
携帯で携帯サイトを閲覧すると...
-
PHP file_get_contents 503 ser...
-
htmlの書き換え
-
SSI される .inc ファイル内に ...
-
COOKIEの保存がうまくいかない
-
phpとhtmlについて分からない部...
-
xhtmlサイトでPHPタグをhtml拡...
-
PHPでheader情報がうまく表示で...
-
xrea+ と 開発環境 とで .htacc...
-
ページに読み込みたい
おすすめ情報
//////////////////////
<?php
include_once("the_php.php");
func('the_html.html');
?>
<?php
/*
<html lang="ja">
<head>
</head>
<body>
aaあ<br><br>
bbb<br><br>
ccc<br><br>
<!--コメント-->
</body>
</html>
*/
?>
//////////////////////
上記のように、htmlファイルの中身を
<?php
/*
~~~
*/
?>
と偽装的なPHP文にしてしかも中身をコメントアウトさせることによって出来ました。
ただ、<body>タグ内に、例として
<?php
echo "私は日本人です。";
?>
の用にPHPを記述すると表示が巧くいきません。この様な、ネスト?見たいなのは可能でしょうか?
関数funcの中で
if(strstr($buffer, '<?php')){
処理;
}
処理を色々と試してみてもダメでした…。方法、ありますか?それともPHPというサーバー側での処理の問題で無理でしょうか?
中間処理としてtemp.htmlを作りました。
the_html.htmlにtemp.htmlを呼び出すyobidashi関数を入れました。ちなみにyobidashi関数はprint関数で1行ずつ読み込みしてます。
//////////////////////the_html.html↓
<?php
include_once("the_php.php");
func('the_html.html');yobidashi('temp.html');
?>
<?php
/*
<html lang="ja">
<head>
</head>
<body>
<?php
echo "私は日本人です。";
?>
~~~
//////////////////////
この様にしてみましたが結果は同じでした。どうすればいいでしょうか?
自分の希望としては、やはり本体html自身が外部PHPファイルを呼び出して、そこに書かれている処理によって自分を整形して表示することです。
tempファイルは作りたくないです。それや自宅で処理したファイルのアップロードもしたくないです。
管理が面倒なので1つのhtmlファイルに付き、存在するファイルはhtmlファイル1つ自身にしたいのです。
可能ですか?