質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • Smarty

    166questions

    Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

[Smarty3] templates_cへの書き込みが弾かれる

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,411

TeraTaka0614

score 3

追記

コメントを参考に構成を変更しました。

libsの配置を以下に変更
旧)/var/www/html/smarty-compile-check/libs/
新)/usr/local/lib/smarty-3.1.30/libs/
※smarty-3.1.30は、サイトからDLしたものを解凍してそのまま配置しています。

発生している問題と達成したいこと

$smarty->display(~~) を実行したとき、以下のエラーで弾かれてしまいます。

PHP Fatal error:  Uncaught  --> Smarty: unable to write file /var/www/html/smarty-compile-check/templates_c/wrt586e97166ea3f4_57131635 <-- \n  thrown in /var/www/html/smarty-compile-check/libs/sysplugins/smarty_internal_runtime_writefile.php on line 49


また、上記エラーで検索して、templates_cとcacheに対して以下のコマンドを叩いて権限を変更しましたが、変わらずにこのエラーが出ました。

[root@localhost smarty-compile-check]# chmod 777 templates_c/ cache/
[root@localhost smarty-compile-check]# ls -la
合計 8
drwxr-xr-x. 6 root root   79  16 04:02 .
drwxr-xr-x. 4 root root   55  16 03:31 ..
drwxrwxrwx. 2 root root    6  16 03:55 cache
-rw-r--r--. 1 root root  114  16 04:02 index.php
drwxr-xr-x. 4 root root 4096  16 02:32 libs
drwxr-xr-x. 2 root root   22  16 04:04 templates
drwxrwxrwx. 2 root root    6  16 03:55 templates_c


このエラーでindex.tplが表示されずに「HTTP ERROR 500」となっているので、templates_cにコンパイルしたファイルを書き込ませてindex.tplを表示させたいです。

使用している環境

Virtualboxの仮想マシンを使用しています。OSはCentOS7です。

現在の状況

実行している関連ファイルは以下のような構成になっています。

/var/
  www/
    html/
      smarty-compile-check/
        templates/
          index.tpl
        templates_c/
        cache/
        index.php
/usr/
  local/
    lib/
      smarty-3.1.30/
        libs/

index.phpとindex.tplの中身

index.php

<?php
    define("SMARTY_DIR", "/usr/local/lib/smarty-3.1.30/libs/");
    require_once(SMARTY_DIR . "Smarty.class.php");
    $smarty = new Smarty();
    $smarty->display("index.tpl");

index.tpl

<!DOCTYPE HTML>
<html>
    <head>
        <title>Welcome Smarty !!!</title>
    </head>
    <body>
        hogehoge smarty
    </body>
</html>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

以下のようなコードを実行すると、インストールの状況をチェックできます。

testInstall()

testInstall() — Smarty のインストール状態を調べる

<?php
define("SMARTY_DIR", "/usr/local/lib/smarty-3.1.30/libs/");
require_once(SMARTY_DIR . "Smarty.class.php");
$smarty = new Smarty();
$smarty->testInstall();

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/07 17:39

    コメントありがとうございます。
    こちら試したところ、以下のような出力になりました。

    Smarty Installation test...
    Testing template directory...
    /var/www/html/smarty-compile-check/templates is OK.
    Testing compile directory...
    FAILED: /var/www/html/smarty-compile-check/templates_c is not writable.
    Testing plugins directory...
    /usr/local/lib/smarty-3.1.30/libs/plugins is OK.
    Testing cache directory...
    FAILED: /var/www/html/smarty-compile-check/cache is not writable.
    Testing configs directory...
    FAILED: /var/www/html/smarty-compile-check/configs/ is not a directory.
    Testing sysplugin files...
    ... OK
    Testing plugin files...
    ... OK
    Tests complete.

    やはり書き込みができないようです・・・。

    キャンセル

  • 2017/01/07 17:41 編集

    chmod -R 777 /var/www/html/smarty-compile-check/templates_c

    一発でいけるはずです。
    もしそれでもおかしい場合、

    rm -rf /var/www/html/smarty-compile-check/templates_c/*

    キャンセル

  • 2017/01/07 17:50

    >Kosuke_Shibuyaさん
    再度やってみました。

    [root@localhost smarty-compile-check]# chmod -R 777 /var/www/html/smarty-compile-check/templates_c
    [root@localhost smarty-compile-check]# ls -la
    合計 4
    drwxr-xr-x. 5 root root 68 1月 6 06:14 .
    drwxr-xr-x. 4 root root 55 1月 6 06:14 ..
    drwxrwxrwx. 2 apache apache 6 1月 6 05:22 cache
    -rw-r--r--. 1 root root 166 1月 6 06:05 index.php
    drwxr-xr-x. 2 root root 22 1月 6 05:59 templates
    drwxrwxrwx. 2 apache apache 6 1月 6 05:22 templates_c
    [root@localhost smarty-compile-check]# rm -rf /var/www/html/smarty-compile-check/templates_c/*

    chmodのあととrm -rfのあとにそれぞれ出力確認しましたが、変化ありませんでした。

    キャンセル

  • 2017/01/07 17:56

    OPcacheが有効になっていたりします?

    キャンセル

  • 2017/01/07 17:58

    まさかですが、$smarty = new Smarty(); のあとに、ディレクトリの設定していないとか?

    キャンセル

  • 2017/01/07 17:59

    OPcacheはたぶん有効になっていないかと。
    OPcache自体初耳でしたので、有効かどうか調べてます。

    キャンセル

  • 2017/01/07 18:11

    >まさかですが、$smarty = new Smarty(); のあとに、ディレクトリの設定していないとか?
    こちら、以下のように再設定しましたが結果変わらずでした。setCompileDirとsetCacheDirがなくても結果は同じでしたね。

    <?php
    define("SMARTY_DIR", "/usr/local/lib/smarty-3.1.30/libs/");
    require_once(SMARTY_DIR . "Smarty.class.php");
    $smarty = new Smarty();
    $smarty->setCompileDir("/var/www/html/smarty-compile-check/templates_c/");
    $smarty->setCacheDir("/var/www/html/smarty-compile-check/cache/");
    $smarty->testInstall();

    キャンセル

  • 2017/01/07 18:20

    もはや、違うサーバーでゴニュゴニョしているとしか思えません…

    キャンセル

  • 2017/01/07 18:28

    お手数おかけして申し訳ないです・・・。
    いったんVMそのものを削除してゼロからやりなおしてみます。

    キャンセル

  • 2017/01/07 18:30

    ちょっとまった。SELinux が有効になってませんか?

    キャンセル

  • 2017/01/07 18:34

    危なかった・・・削除する手前でした(--;
    SELinux有効になってますね・・・。

    キャンセル

  • 2017/01/07 18:35

    無効にしましょう。

    キャンセル

  • 2017/01/07 18:37

    ありがとうございます。selinuxにしたことでOKになりました。

    Smarty Installation test...
    Testing template directory...
    /var/www/html/smarty-compile-check/templates is OK.
    Testing compile directory...
    /var/www/html/smarty-compile-check/templates_c is OK.
    Testing plugins directory...
    /usr/local/lib/smarty-3.1.30/libs/plugins is OK.
    Testing cache directory...
    /var/www/html/smarty-compile-check/cache is OK.
    Testing configs directory...
    FAILED: /var/www/html/smarty-compile-check/configs/ is not a directory.
    Testing sysplugin files...
    ... OK
    Testing plugin files...
    ... OK
    Tests complete.

    キャンセル

  • 2017/01/07 18:41

    グッジョブ!

    キャンセル

0

chmod 777 templates_c/ cache/
chmod -R a+rw templates_c/ cache/


だとどうでしょう?

(追記)
失礼しました。Permission Denied じゃないから権限不足じゃなさそうですね。
Document Root 配下に Smarty 本体があるのはちょっとおかしい気がします。

http://www.smarty.net/docs/ja/installing.smarty.basic.tpl

を読んで、もう一度設置環境を見直してみてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/07 12:54

    回答ありがとうございます。
    試してみましたが、変化ありませんでした・・・。
    ```bash
    [root@localhost smarty-compile-check]# chmod 777 templates_c/ cache/
    [root@localhost smarty-compile-check]# chmod -R templates_c/ cache/
    chmod: 無効なモード: `templates_c/'
    Try 'chmod --help' for more information.
    [root@localhost smarty-compile-check]# chmod -R a+rw templates_c/ cache/
    [root@localhost smarty-compile-check]# ls -la
    合計 8
    drwxr-xr-x. 6 root root 79 1月 6 04:02 .
    drwxr-xr-x. 4 root root 55 1月 6 03:31 ..
    drwxrwxrwx. 2 root root 6 1月 6 03:55 cache
    -rw-r--r--. 1 root root 114 1月 6 04:02 index.php
    drwxr-xr-x. 4 root root 4096 1月 6 02:32 libs
    drwxr-xr-x. 2 root root 22 1月 6 04:04 templates
    drwxrwxrwx. 2 root root 6 1月 6 03:55 templates_c
    [root@localhost smarty-compile-check]#
    [root@localhost smarty-compile-check]# systemctl restart httpd.service
    ```

    キャンセル

  • 2017/01/07 16:25

    回答通りのコマンドを実行していないから、失敗しているだけですよね。

    キャンセル

  • 2017/01/07 16:46

    >hottaさん
    追記ありがとうございます。もう一度インストールから試してみます。
    >kosuke_Shibuyaさん
    「回答通りのコマンドを実行していない」とは「chmod -R templates_c/ cache/」のことでしょうか?
    それとも回答にない「systemctl restart httpd.service」を実行していることでしょうか?

    キャンセル

  • 2017/01/07 16:48 編集

    chmod -R templates_c/ cache/
    ですね
    そのあとで実行しているんですね。失礼しました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Smarty

    166questions

    Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。