今なら家電が全品9%OFF!

PHP+smartyを学んでいます。
Apache2-htdocs-taro-hanako.php とファイルを置き、一方、
Apache2-php_libs-smarty の下に
-libs/ (中にSmarty.class.php あり) と
-templates/ (中にtest.tpl あり)を並列的におきました。
hanako.php に、
require_once "../../php_libs/smarty/libs/Smarty.class.php";
$smarty = new Smarty;
$smarty->templete_dir = "../../php_libs/smarty/templates";
  $smarty->compile_dir = "../../php_libs/smarty/templates_c";
$smarty->cache_dir = "../../php_libs/smarty/cache";
以下省略・・・
と書いてブラウザで開くと、次のエラーが出て、tpl を読み込むことが出来ません。

Warning: Smarty error: unable to read resource: "test.tpl" in C:\Program Files\Apache Group\Apache2\php_libs\smarty\libs\Smarty.class.php on line 1088

どこを間違えているのでしょうか。

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

A 回答 (3件)

Windows版だとなにか違うんでしょうかねぇ・・・


私はUNIX版で同じソースを書いてみたのですが、
正常に動作してます。
ちなみに私はこんな風に書いてみました。
(全て同一ディレクトリ)
・taro.php
<?php
  require_once "config.php";
  $smarty = new Smarty;
  $smarty->compile_dir = $cpl_dir;
  $smarty->templete_dir = $cnf_dir;
  $smarty->cache_dir = $cch_dir;

$smarty->assign("lista",dog);
$smarty->assign("listb",cat);
$smarty->display($doc_root . "test.tpl");
?>
・test.tpl
  <html>
  lista={$lista}<br>
  listb={$listb}<br>
  </html>
・config.php
<?php
  require_once "/usr/local/share/smarty/Smarty.class.php";
  $doc_root ="/usr/local/www/data-dist/test/";
  $cpl_dir = '/usr/local/share/smarty/template_c';
  $cnf_dir = '/usr/local/share/smarty/configs';
  $cch_dir = '/usr/local/share/smarty/cache';
?>
これだとうまくいくんですが、おっしゃっている障害の
原因とは考えにくいですねぇ・・・
おそらく、「$smarty->display();」の部分がキモだとは思うのですが、
Windows版でやった事が無いので、あまり参考にならないかもしれません。
パスの書き方をいろいろと工夫してみてはいかがでしょうか?
Apache(で動かしてるのかな!?)のドキュメントルートからパスを書いて
見るとか・・・いろいろと。
    • good
    • 0
この回答へのお礼

yossy-55様
いろいろお手数をおかけし、お蔭様で解決の糸口を掴むことが出来ました。
ご示唆頂いた諸点を基礎にいろいろ調べ、試行錯誤した結果、解決しました!
やはり、Windowsのローカルルールがあったのです。
$smarty->display("file:絶対パス/test.tpl");
とすることで、hanako.phpをブラウザ上で実行して所期の画面を表示させることができました。
本当に有難うございました。

お礼日時:2007/03/05 19:58

コンパイルディレクトリは作ってますか?


C:\Program Files\Apache Group\Apache2\php_libs/smarty/templates_c
キャッシュディレクトリは作ってますか?
C:\Program Files\Apache Group\Apache2\php_libs/smarty/cache

$smarty->display("
C:\Program Files\Apache Group\Apache2\php-libs \smarty \libs \templates\test.tpl
");
とすると、どうなりますか?
例えば、config.phpをrequireして、中に
$tpl_root="C:\Program Files\Apache Group\Apache2\php-libs \smarty \libs \templates\";
等として、
hanako.phpに
require_once "config.php";を追加して
$smarty->display("test.tpl");を
$smarty->display("{$tpl_root}test.tpl");
としてみたらどうでしょう...

すみません。Windows版はあまりやった事無いので、付け焼刃かもしれませんが…

この回答への補足

hanako.phpの全文は次のように書いています。
<?php
require_once "../../php_libs/smarty/libs/Smarty.class.php";
$smarty = new Smarty;
$smarty->templete_dir = "../../php_libs/smarty/templates";
$smarty->compile_dir = "../../php_libs/smarty/templates_c";
$smarty->cache_dir = "../../php_libs/smarty/cache";

$smarty->assign('lista',dog);
$smarty->assign('listb',cat);
$smarty->display("test.tpl");
?>
---------------
config.phpでの確認はまだ出来ておりませんが、

$smarty->display("test.tpl")の ""の中を
1) ./test.tpl とした時の、エラーメッセージ
Warning: Smarty error: unable to read resource: "./test.tpl" in C:\Program Files\Apache Group\Apache2\php_libs\smarty\libs\Smarty.class.php on line 1088
2) ../../php_libs/smarty/templates/test.tpl とした時の、エラーメッセージ
Warning: Smarty error: unable to read resource: "../../php_libs/smarty/templates/tanukisample1.tpl" in C:\Program Files\Apache Group\Apache2\php_libs\smarty\libs\Smarty.class.php on line 1088
3) 絶対パスで書いた時の、エラーメッセージ
(絶対パスで書いているのにエラーメッセージが相対パスで示される。)
Warning: Smarty error: unable to read resource: "../../php_libs/smarty/templates/test.tpl" in C:\Program Files\Apache Group\Apache2\php_libs\smarty\libs\Smarty.class.php on line 1088

smartyの直下にlibsディレクトリとtemplates,templates_c,cache各ディレクトリを並列に置いていますが、
このパス指定の仕方が間違っているのでしょうか?

補足日時:2007/03/04 22:50
    • good
    • 0

大事な所が「以下略」となっている気がしますが…


$smarty->display("test.tpl");
""に囲まれている部分はどうなっているのでしょう?
ここのパスはあっていますか?

この回答への補足

有難うございます。
$smarty->display("test.tpl"); は、このまま、$smarty->display("test.tpl");となっていました。。。。。。
しかし、
$smarty->display("../../php_libs/smarty/templates/test.tpl");
としても、
Warning: Smarty error: unable to read resource: "../../php_libs/smarty/templates/test.tpl" in C:\Program Files\Apache Group\Apache2\php_libs\smarty\libs\Smarty.class.php on line 1088
となって、読み込めないですが。。。。。

補足日時:2007/03/04 18:48
    • good
    • 0

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

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

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

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

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

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 ...続きを読む

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
としてみてはどうでしょう?

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

QリダイレクトでPOST

教えてください。

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

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

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

Aベストアンサー

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

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

Qリンクをクリックした時にformからPOST送信したい。

HTML、PHP、JavaScript等でサイトを作っているのですが・・・。

【実現出来ている例】
<form name="form1" method="post" action="Next.php" onSubmit="return InputCheck()">
 <input type="submit" value="送信">
</form>
 submitボタンを一つ置いて、それがクリックされた場合に
formの内容をPOSTで送信する。

【実現したい例】
<form name="form1 method="post">
 <a href="Next.php" onClick="???">???</a>
</form>
 formの中のリンクをクリックされた場合に、formの内容を
POSTで送信したいのですが、その実現方法がわかりません。
GETで送るという手もあり得ますが、今回はどうしてもPOST
したいのですが。

Aベストアンサー

<form name="form1" method="post" action="Next.php">
<a href="#" onClick="document.form1.submit();">???</a>
</form>

onclick内の対象がform1としてあてているので、
アンカータグは別にform内に記述しなくても大丈夫です

form内にhidden等でnameとvalueを持ったパラメータがあればそれも送られます

アンカータグから動的にvalueを変更したい場合は、
document.form1.hogename.value = 'hoge';
等をsubmit()の前に行えば可能です

ただしform内に
<input type="hidden" name="hogename" value="">
を記述する等、変更先パラメータの元を用意する必要がありますのでご注意下さい

Qforeachで回った数を表示したい

単純な質問ですみません。
====
//getTestlistは別ファイルで定義済み。
<?
$testlist=getTestlist();
foreach($testlist as $test){
?>


<? } ?>
====
例えば↑こんなふうにforeachで$testlistが存在するだけ回したとします。
そのときに何回まわったか?($testが何件あったか?)だけを表示したいのですが、そんなことってできますか?
表示したい位置は<? } ?>の外側にと考えています。
あさってな質問でしたらすみません。
phpVer 4.3

よろしくお願いいたします。

Aベストアンサー

<?
$testlist=getTestlist();
$n=0;
foreach($testlist as $test){
$n++;
?>
<?}?>

<?=$n?>回
とかでよいかと思います。

途中でbreakなどが無ければ
<? echo count($testlist) ?>でも良いかも知れません。

QDBエラーの意味

フォームからDBにデータ挿入しようとすると

Column count doesn't match value count at row 1

というエラーが出てしまいます・・・どういう意味を持ったエラーなんでしょうか?

Aベストアンサー

カラム数と値の数が合わない、と言う事です。簡単な英語なので覚えましょう。
カラム数が4つにもかかわらず、
"INSERT INTO tablename VALUES (1,'hoge',3)"
とやった場合等に出るエラーだと思います。

QERROR1062:Duplicate entry.....というエラーが出てしまいました

いつもお世話になります。
データベースからSELECTで抽出したデータを別のテーブルにINSERTするSQLを実行したのですが、
ERROR1062:Duplicate entry.....というエラーが出てしまいました。
お詳しい方がいらっしゃいましたら、アドバイスをいただけませんでしょうか?よろしくお願いいたします。
【実行したSQL】
INSERT INTO tblA (dataA1, dataA2, dataA3, dataA4) SELECT "9001","AA",dataB1,dataB2 FROM tblB WHERE dataB1 = 52

tblAの主キー:dataA1とdataA2
tblBの主キー:dataB1

dataA1とdataA2はtblAの主キーとなっているため、重複してしまうということのようです。tblBの主キーはdataB1であるため、抽出されてくるデータは常に1件なので問題ないと期待していましたが、甘くなかったようです。何か良い方法はないものでしょうか?よろしくお願いいたします。

Aベストアンサー

「ERROR 1062」は、重複データを格納しようとした場合に出力されるエラーです。
既にdataA1='9001'&dataA2='AA'という行が、tblAに格納されているのですよね?

>抽出されてくるデータは常に1件なので問題ないと期待していました

「insert ~ select ~」を実行前に、既に同じデータが格納されているのでは?
あるいはprimary keyの指定が、質問中に記された通りでなく、2件以上検索されているかです。

>何か良い方法はないものでしょうか?

何をするための方法を、聞きたいのかが分かりませんが?

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

QFatal error: Class 'Config' not found

新しい configファイルを作りたいですけど、Fatal error: Class 'Config' not foundのメッセージが出てきた。どうやって設定した方がいいですか?
require_once ('Config.php');
$conf = new Config;
$root = & $conf->parseConfig('config.ini','IniFile');

Aベストアンサー

>> あるいは、カレントパスに Configパッケージと同名のファイルを置いていませんか?

上記についてはどうですか?
あるいは、インクルードパスのいずれかに、Configパッケージ以外の
Config.phpファイルが存在していませんか?

require_once ('Config.php'); の行を
下記のようにフルパスにかえたらどうなりますか
require_once ('/usr/local/php/pear/share/pear/Config.php');
注)Congif.phpのパスはあなたの環境に合わせてください


人気Q&Aランキング