プロが教えるわが家の防犯対策術!

Smartyのテンプレートにincludeしたファイルを表示したいのですが、うまくいきません。

具体的には、意図しない数値が入ってしまいます。
どうすればよいのでしょうか?

■呼び出す側
require("../../libs/Smarty.class.php");

require_once('../../lib/set_include_path.php');
$header = include("header.php");

$smarty = new Smarty();

$smarty->assign("header",$header);

$smarty->display("date.html");

■テンプレート
<body>
{$header}<br>日付<br>

■表示例
include("header.php"); の内容が正常表示
1
日付

include("header.php"); の内容が正常表示された後、勝手に「1」と表示されるので、困ってます。表示されないようにするにはどうすればよいでしょうか。

var_dump($header);ってしたところ、int(1) ってなるので、この1が表示されているのかと思うのですが、なんで表示されるのか、表示されないようにするにはどうすればよいか、教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

$header = include("header.php");


とした場合、$header の中に header.php の中身が代入されるわけではありません。
include はプログラムのその場所に指定されたファイルの中身を展開してしまいます。
この時 $header にはincludeの実行結果として成功した場合 1 が入り、失敗した場合は FALSE が入ります。

$header の中に header.php の中身を入れたい場合は
$header = file_get_contents("header.php");
とするのがいいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。
うまく動作するようになりました。
大変勉強になりましたー。

お礼日時:2010/09/15 16:41

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q配列をPOSTで受けとる

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j]"];
   print"$foo[$j]";
}
?>


こんな感じのことがしたいのですが
うまくいきません
どうもPOSTされてないみたいでfoo[$j]はnullです
凡ミスな気がしなくもないんですが...プログラム初心者なんで↓↓
教えてください
よろしくお願いします

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j...続きを読む

Aベストアンサー

atsuGTさんこんにちは。


受け取り側は

$foo = $_POST["foo"];

とするだけで$fooに送信された配列が格納されます。


$_POST["foo[添え字]"] ではなく、
$_POST["foo"][添え字] となります。

QSmarty includeでテンプレートを読み込めない

よろしくお願いします。

まずphpファイルから
$smarty->display('111/body.tpl');(*111はディレクトリ名)
を呼び出して、さらにbody.tplと同ディレクトリにあるcontents.tplを読み込もうとしています。

はじめのbody.tplは読み込むことができブラウザで表示されるのですが、contents.tplは読み込めず、
Warning: Smarty error: unable to read resource: "contents.tpl" in <絶対パス>/Smarty/Smarty.class.php on line 1095
のエラーが出てしまいます。

ちなみに/111/というディレクトリは、$template_dir以下、$template_dir/111/です。

{include file="contents.tpl"}
{include file="file:contents.tpl"}
{include file="絶対パス/contents.tpl"}
{include file="file:絶対パス/contents.tpl"}
など試しましたが、ダメでした。

知恵をお貸しください。よろしくお願いします。

よろしくお願いします。

まずphpファイルから
$smarty->display('111/body.tpl');(*111はディレクトリ名)
を呼び出して、さらにbody.tplと同ディレクトリにあるcontents.tplを読み込もうとしています。

はじめのbody.tplは読み込むことができブラウザで表示されるのですが、contents.tplは読み込めず、
Warning: Smarty error: unable to read resource: "contents.tpl" in <絶対パス>/Smarty/Smarty.class.php on line 1095
のエラーが出てしまいます。

ちなみに/111/というディレクトリは、$te...続きを読む

Aベストアンサー

まずcontents.tplのみを呼び出して実行出来ますか?

templatesにフォルダを分けているなら、
下記のようになります。

/templates/ 
 ├ body.tpl
 ├/111/
   └contents.tpl
 ├/222/
   └contents.tpl

body.tplを呼び込んで、その中で、
{include file="111/contents.tpl"}
{include file="222/contents.tpl"}

で読み込めると思うのですが。


$this->template_dir = "/home/public_html/templates";
$this->compile_dir = "/home/public_html/templates_c";
$this->config_dir = "/home/public_html/conf";

Windowsの場合は、
$this->template_dir = "C:/home/public_html/templates";

まずcontents.tplのみを呼び出して実行出来ますか?

templatesにフォルダを分けているなら、
下記のようになります。

/templates/ 
 ├ body.tpl
 ├/111/
   └contents.tpl
 ├/222/
   └contents.tpl

body.tplを呼び込んで、その中で、
{include file="111/contents.tpl"}
{include file="222/contents.tpl"}

で読み込めると思うのですが。


$this->template_dir = "/home/public_html/templates";
$this->compile_dir = "/home/public_html/templates_c";
$this->config_dir ...続きを読む

Q文字列から、特定の文字を削除したい

アンケートで入力された値を受け取り、メールで送信しているのですが、受け取った値から、特定の文字列を削除することは可能でしょうか?

例えば電話番号の入力の場合、
03-xxxx-xxxx →03xxxxxxxx
077-xxx-xxxx →077xxxxxxx
のように、-(ハイフン)が入力されていたら、-を削除した文字列に置換してメール送信したいのです。
入力する時に、3つのテキストエリアに分けるのは諸事情でできないので、特定の文字を削除する関数か処理方法がありましたら、教えていただきたいです。
よろしくお願いします。

Aベストアンサー

str_replace
http://itbtech.itboost.co.jp/man/php_man/function.str-replace.html

<?php
$orig_telno = "03-xxxx-xxxx";

$telno = str_replace("-", "", $orig_telno);
echo $telno;

03xxxxxxxx

“PHP 文字列” あたりをキーワードに検索すれば
そんなに難しいものでもないような。

Qinclude先でのinclude元の変数について

度々お世話になっています。
include先でのinclude元の変数の扱いについて疑問に思ったので質問させて下さい。
include元ファイルtest.php include先ファイルinclude.phpとしてtest.php内の変数をinclude.phpに渡したいと考え以下のコードを書きました。

test.php
<?php
$test = "いけるかな?";
include "include.php";
?>

include.php
<?php
echo $test;
?>

結果、$testの値を表示する事が出来なかったのですが、$testの値を表示するためにはどのような記述方法があるのでしょうか?
また、このような動作を期待している理由としてはPHP部分とHTMLを分離させたいと考えており、ユーザ定義関数に変数を引数として渡して、出力処理をユーザ定義関数内で行うという事も考えたのですが、include先に値を渡す事が出来れば、非常にわかりやすく分離出来ると考えたからです。

他に、PHP部分とHTML部分をファイル分けするやり方などありましたら教えて頂けますとうれしいです。

度々お世話になっています。
include先でのinclude元の変数の扱いについて疑問に思ったので質問させて下さい。
include元ファイルtest.php include先ファイルinclude.phpとしてtest.php内の変数をinclude.phpに渡したいと考え以下のコードを書きました。

test.php
<?php
$test = "いけるかな?";
include "include.php";
?>

include.php
<?php
echo $test;
?>

結果、$testの値を表示する事が出来なかったのですが、$testの値を表示するためにはどのような記述方法があるのでしょうか?
また、...続きを読む

Aベストアンサー

>変数$aはインクルードされた b.inc スクリプトの中でも利用可能です。
<?php
$a = 1;
include 'b.inc';
?>

問題なさそうに見えますけど、記述ミスとかありませんか?
先頭に
ini_set('display_errors', 1);
error_reporting(E_ALL);
としたら何か表示されますか?

include は割と自由度が高いので失敗すると余計分かりにくくなりますが
ロジックと出力の分離としては基本的な設計と思います。
この構成に、View(HTML)用の値を格納する箱(オブジェクト等)を作り、
Viewはその箱の値を操作するようにする、とかやっていけば
いわゆるMVCモデリングに近づきます。

参考URL:http://jp2.php.net/include/

QSmartyでインクリメント

Smartyで以下のような処理がしたいのですがうまくいきません・・・(横にセルを5コ並べた後に改行したい)
どのように記述したらよいか教えて頂けますでしょうか。

<table>
<tr>
{$i = 0}
{foreach item=item_list from=$item_list}
<td>{$item_list.hoge|escape}</td>
{$i = $i + 1}
{if $i mod 4 eq 0}
</tr><tr>
{/if}
{/foreach}
</table>

Aベストアンサー

Smartyでは、PHPのように $i = 0 のような書き方はできません。
変数に値を入れたいのであれば、{assign var=i value=$i+1}のようになります。

foreachの場合は、iterationがあるので、インクリメントをする必要は無く、
<table>
<tr>
{foreach item=item_list from=$item_list name=item_loop}
<td>{$item_list.hoge|escape}</td>
{if $smarty.foreach.item_loop.iteration % 5 ep 0}
{* 5つ目の値なら行を閉じて次の行を始める *}
</tr><tr>
{/if}
{/foreach}
</table>
のような書き方で動きます。
ただし、これではテーブルの構造をちゃんと作れない(最後の行を</tr>で閉じることができない)ので、少し変更する必要があると思います。

その辺を気になさらないのであれば、以下は無視してくださって結構です。
<table>
<tr>
{foreach item=item_list from=$item_list name=item_loop}
<td>{$item_list.hoge|escape}</td>
{if $smarty.foreach.item_loop.iteration % 5 ep 0}
{* その行で5つ目のデータなら</tr>を入れる *}
</tr>
{if not $smarty.foreach.item_loop.last}
{* それが最後のデータじゃなかったら次の行を始める *}
<tr>
{/if}
{/if}
{if $smarty.foreach.item_loop.last and $smarty.foreach.item_loop.total % 5 neq 0}
{* 最後のデータで、その行の5つ目じゃない(</tr>が入っていない)場合は</tr>を入れてあげる *}
{* ここに<td></td>を必要な数だけ入れた方がいいですが、なくてもそんなにおかしくはないです *}
</tr>
{/if}
{/foreach}
</table>

参考URL:http://sky.freespace.jp/smarty/SmartyManual_2-6-3J_html/language.function.foreach.html

Smartyでは、PHPのように $i = 0 のような書き方はできません。
変数に値を入れたいのであれば、{assign var=i value=$i+1}のようになります。

foreachの場合は、iterationがあるので、インクリメントをする必要は無く、
<table>
<tr>
{foreach item=item_list from=$item_list name=item_loop}
<td>{$item_list.hoge|escape}</td>
{if $smarty.foreach.item_loop.iteration % 5 ep 0}
{* 5つ目の値なら行を閉じて次の行を始める *}
</tr><tr>
{/if}
{/foreach}
</table>
のような書き方で動きます...続きを読む

QリダイレクトでPOST

教えてください。

リダイレクトの際、POSTで次のページにデータを渡すことは可能でしょうか?

GETだと
header("Location: "a.php?no=".$no);
と、問題なくできるのですが、
できれば、パラメータを隠したいと思います。

以上ですが、よろしくお願いします。

Aベストアンサー

多分できないです。
それに、結局クライアント側に情報を送信しているのだから、POSTにしたところでパラメータを隠した事にはならないですし。
本当に隠すならサーバ側でセッション情報を引き継ぐような形にしないとダメでしょう。

AJAXのかたちにして、ページ遷移を見えなくするというのが手っ取り早いかも。

Qrequire_once()でファイルが読み込めません

すいません、色々やったみたのですがよく分からなかったので教えてください。

PHPのテンプレートのSmartyを使いたいと思い、公式サイトからダウンロードして/usr/local/lib/php/Smartyにコピーしました。

その後、php.iniのinclude_pathにて".:/usr/local/lib/php/Smarty"と設定し、require_once("Smarty.class.php");としたのですが、

failed to open stream: No such file or directoryや
Failed opening required 'Smarty.class.php'

というエラーが出て読み込めません。また、phpinfo()を見る限りではphp.iniはきちんと読みにいっているようでした。

ためしに/usr/にSmartyを置き、include_pathもそのように変更してみたのですが読み込めません。カレントディレクトリに配置した場合は上手く読み込めました。また、Smartyでなくてもどのファイルでも読み込めない状況です。

環境はFedora6、Apache2.0、PHP5です。何かアドバイスよろしくお願いします。

すいません、色々やったみたのですがよく分からなかったので教えてください。

PHPのテンプレートのSmartyを使いたいと思い、公式サイトからダウンロードして/usr/local/lib/php/Smartyにコピーしました。

その後、php.iniのinclude_pathにて".:/usr/local/lib/php/Smarty"と設定し、require_once("Smarty.class.php");としたのですが、

failed to open stream: No such file or directoryや
Failed opening required 'Smarty.class.php'

というエラーが出て読み込めません。また、phpinfo()を見る限...続きを読む

Aベストアンサー

Smarty.class.phpのパーミッションはどうですか?

include_path上にファイルが存在しても、Webサーバを動かしているユーザから読めなければ、ファイルが読めずエラーになります。

一時的に
chmod 755 Smarty.class.php
としてみてはどうでしょう?

これで動くようなら、所有者を変更するかして正しいパーミッションに戻せばよいと思います。

Qheader(Location:~)で$_SESSION[" "]が保持されない。

自宅サーバー(apache2+php5+mysql5)のlocalhost環境で、
header(Lcation:~)の記述をすると、
セッションが保持されない現象が起きています。

本番環境のレンタルサーバーは、同じ記述で、
しっかりとセッションが保持されます。
この原因は、何でしょうか?

php.iniの設定など、何か考えられることがあれば、
是非教えて下さい。

【やりたいこと】

■a.php
****************************************
<?php
echo<<<EOD
<form method="POST" action="./b.php">
<INPUT type="text" name="test">
<INPUT type="submit" name="Submit" value="確認画面へ">
</form>
EOD;
?>

■b.php
****************************************
<?php
$_SESSION["test"]=$_POST["test"];
header("Location:./c.php");
?>

■c.php
****************************************
<?php
echo $_SESSION["test"];
?>

自宅サーバーだと、
a.phpで入れたデータが、c.phpで表示されません。

レンタルサーバーだと、
セッションが保持され、表示されます。

自宅サーバー(apache2+php5+mysql5)のlocalhost環境で、
header(Lcation:~)の記述をすると、
セッションが保持されない現象が起きています。

本番環境のレンタルサーバーは、同じ記述で、
しっかりとセッションが保持されます。
この原因は、何でしょうか?

php.iniの設定など、何か考えられることがあれば、
是非教えて下さい。

【やりたいこと】

■a.php
****************************************
<?php
echo<<<EOD
<form method="POST" action="./b.php">
<INPUT type="text" name=...続きを読む

Aベストアンサー

php.iniのsession.cookie_path設定が異なっていたとかはないですか?
ページによって再設定していたりすると、'/' と '' では異なるcookie として保存されるので、session id も異なって発行されます。
ブラウザに保存されたcookie情報も確認してみるとよいでしょう。
私も先日、このpath設定をいじってて、「sessionが保存されてない?」「消したのに残ってる?」という状況に遭遇しました。

QMySQLで改行を含む文の登録のしかた(改行コード

MySQLで改行を含む文を登録したいんですが、改行を改行コードに書き換えて登録したいです。
改行コードはどのように書けばいいですか?

登録したい文:
あいうえお
かきくけこ
さしすせそ

Aベストアンサー

改行コードは¥nで登録すれば良いです。


人気Q&Aランキング