プロが教える店舗&オフィスのセキュリティ対策術

レンタルサーバーのPHP5利用者です。
include() や require() 等で外部の関数を読み込む場合、
<?php ~ ?> の外側に文字があるとそれが変なところで表示されてしまいます。例えば、

<呼び出し側>
include(gaibu.php);
$msg = write_fc();
print $msg;

<外部ファイル側>
aaa
<?php
function write_fc(){
return 'Hello';
}
?>
bbb

<結果>
aaabbbHello

といった感じなのですが…
この「aaa」「bbb」をさせない方法があれば教えてください。
それとも<?php ~ ?> の外側に文字をかくこと自体非常識なのでしょうか。
お詳しい方、よろしくお願いいたします。

A 回答 (4件)

includeされる側(=外部ファイル側)の <?php ~ ?> の外に文字を書くということは、「これらの文字列をそのままHTMLとして取り込んでね!」と宣言しているような状態です。

よって、そのまま表示されるのが自然な動作です。

もしこれらの表示をさせたくないのであれば、
 ・外部ファイルから該当する部分を削除する。
 ・または、HTML形式のコメントアウトを施す。
といった対応になると思います。
    • good
    • 0
この回答へのお礼

なるほど。
「aaa」「bbb」を受け取っても、いったん変数内に入れて削除とかできないかなと思っていましたが無理なんですね。
どの専門書にも <?php ~ ?> の外に文字を書くなとは書いてないし不思議に思っていました。
ありがとうございました。

お礼日時:2008/03/06 01:32

>この「aaa」「bbb」をさせない方法があれば教えてください。


質問内容のような書き方をしているかぎり、表示させない方法はありません

>それとも<?php ~ ?> の外側に文字をかくこと自体非常識なのでしょうか。
個人で趣味レベルでのプログラムならば自由ですが、実際にプログラムを仕事としている人たちの中では非常識な記述方法です


とりあえずの解決方法としては、function類は、function類だけを記述したファイルを作りましょう
実際に画面として表示させるところでincludeさせて処理をするという方法。
こうやっておくと、HTML部分とfunction部分を分離することが出来ます。
この方法が一般的と言うわけではありませんが、HTMLとphpのロジック部分をごちゃ混ぜにするよりはマシです。


<外部ファイル側>
------------func.php
<?php
function write_fc(){
return 'Hello';
}

function FooFunc(){
return 'foo';
}

function HogeFunc(){
return 'hoge';
}

?>
--------------------


--------------------aaabbb.php
<?php
include(func.php);
$foo = FooFunc();
$hoge = HogeFunc();
?>

aaa
<?php print $foo; ?>
bbb
<?php print $hoge; ?>

--------------------
実行結果
aaaFoobbbHoge




--------------------index.php
<?php
include(func.php);
$msg = write_fc();
print $msg;
?>
--------------------
実行結果
Hello
    • good
    • 0
この回答へのお礼

やっぱ <?php ~ ?> の外に文字を書いちゃダメなんですね。
ファーストサーバーの場合、プログラムの1行目に
#! /usr/bin/php
と書かなきゃいけないようなのでこれが丸見えになって困っていました。
でも外部ファイル側には書かなくても動作するみたいなのでなんとかなりそうです。
ありがとうございました。

お礼日時:2008/03/06 01:40

できるかできないかと言われれば、できます。


呼び出し側で出力のバッファリング処理というのをすればよいでしょう。
ただ、インクルードするのに無駄な出力があるのはどうかとおもうので
やらない方がだとうかなぁと。

<?
ob_start();
include "gaibu.php";
ob_end_clean();
$msg = write_fc();
print $msg;
?>
    • good
    • 0
この回答へのお礼

なるほど、書き出しをやめさせる方法があったのですね。
ありがとうございます。

お礼日時:2008/03/09 02:31

>ファーストサーバーの場合、プログラムの1行目に


>#! /usr/bin/php
>と書かなきゃいけないようなのでこれが丸見えになって困っていました。

CGI動作ですね。Perlスクリプトでも同じですが、最初に起動されるスクリプトの先頭にあればいいので、includeやrequireされる側には不要です。includeされる側は拡張子は.cgiや.phpに限定されないですしね。
    • good
    • 0
この回答へのお礼

なんと!サーバー屋の説明にはそのようなことは…
ありがとうございました。

お礼日時:2008/03/09 02:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!