1

最新バージョンのリチウムを入手した後、なぜこの例外が発生するのか、誰にも分かりますか?

( ! ) Fatal error:
  Uncaught exception 'lithium\template\TemplateException' with message
  'Could not write compiled template
  C:\Users\Master\Documents\Visual Studio 2010\Projects\PSER\PSER/resources/tmp/cache/templates/template_views_pages_index.html_0_1344056913_326.php
  to cache.' in
  C:\Users\Master\Documents\Visual Studio 2010\Projects\libraries\lithium\template\view\Compiler.php
  on line 81

( ! ) lithium\template\TemplateException:
  Could not write compiled template
  C:\Users\Master\Documents\Visual Studio 2010\Projects\PSER\PSER/resources/tmp/cache/templates/template_views_pages_index.html_0_1344056913_326.php
  to cache. in
  C:\Users\Master\Documents\Visual Studio 2010\Projects\libraries\lithium\template\view\Compiler.php
  on line 81

Call Stack

Time Memory Function Location

1 0.1070 331944 {main}( ) ..\index.php:0
2 0.2013 4387040 lithium\action\Dispatcher::run( ???, ??? ) ..\index.php:41
3 0.2013 4388248 lithium\core\StaticObject::filter( ???, ???, ???, ??? ) ..\Dispatcher.php:155
4 0.2013 4389784 lithium\util\collection\Filters::run( ???, ???, ??? ) ..\StaticObject.php:126
5 0.2014 4391752 {closure}( ???, ???, ??? ) ..\Filters.php:183
6 0.2015 4391752 lithium\util\collection\Filters->next( ???, ???, ??? ) ..\cache.php:46
7 0.2015 4391784 {closure}( ???, ???, ??? ) ..\Filters.php:202
8 0.2075 4427760 lithium\util\collection\Filters->next( ???, ???, ??? ) ..\action.php:51
9 0.2075 4427792 lithium\action{closure}( ???, ???, ??? ) ..\Filters.php:202
10 0.2198 4534776 lithium\core\StaticObject::invokeMethod( ???, ??? ) ..\Dispatcher.php:154
11 0.2198 4534808 lithium\action\Dispatcher::_call( ???, ???, ??? ) ..\StaticObject.php:75
12 0.2198 4535896 lithium\core\StaticObject::_filter( ???, ???, ???, ??? ) ..\Dispatcher.php:265
13 0.2198 4536152 lithium\action{closure}( ???, ???, ??? ) ..\StaticObject.php:119
14 0.2198 4536152 lithium\action\Controller->_invoke( ???, ???, ??? ) ..\Dispatcher.php:262
15 0.2199 4537752 lithium\core\Object->_filter( ???, ???, ???, ??? ) ..\Controller.php:198
16 0.2199 4538032 lithium\action{closure}( ???, ???, ??? ) ..\Object.php:238
17 0.2199 4538280 lithium\core\Object->invokeMethod( ???, ??? ) ..\Controller.php:184
18 0.2200 4538312 app\controllers\PagesController->view( ) ..\Object.php:165
19 0.2200 4538824 lithium\action\Controller->render( ??? ) ..\PagesController.php:32
20 0.2204 4541320 lithium\net\http\Media::render( ???, ???, ??? ) ..\Controller.php:266
21 0.2205 4550368 lithium\core\StaticObject::_filter( ???, ???, ???, ??? ) ..\Media.php:593
22 0.2206 4550616 lithium\net\http{closure}( ???, ???, ??? ) ..\StaticObject.php:119
23 0.2208 4553656 lithium\core\StaticObject::invokeMethod( ???, ??? ) ..\Media.php:590
24 0.2208 4553984 lithium\net\http\Media::_handle( ???, ???, ??? ) ..\StaticObject.php:75
25 0.2208 4555936 lithium\core\StaticObject::_filter( ???, ???, ???, ??? ) ..\Media.php:750
26 0.2209 4556184 lithium\net\http{closure}( ???, ???, ??? ) ..\StaticObject.php:119
27 0.2257 4579800 lithium\template\View->render( ???, ???, ??? ) ..\Media.php:746
28 0.2259 4583520 lithium\template\View->_step( ???, ???, ???, ??? ) ..\View.php:328
29 0.2259 4587040 lithium\core\Object->_filter( ???, ???, ???, ??? ) ..\View.php:389
30 0.2260 4587304 lithium\template{closure}( ???, ???, ??? ) ..\Object.php:238
31 0.2260 4587336 lithium\template\view\adapter\File->template( ???, ??? ) ..\View.php:386
32 0.2272 4588624 lithium\template\view\Compiler::template( ???, ??? ) ..\File.php:133

パス内のスラッシュ (前方または後方) に問題はないと確信しています。Windows 上のパスにスラッシュとバック スラッシュが共存できることを証明する簡単なテスト スクリプトを作成しました。結果のパスは次のとおりです。

C:/Users/Master/Documents/Visual Studio 2010/Projects/PHP Prototyping/PHP Prototyping\ABC\testFile.txt

コードサンプルは次のとおりです。

<?php
    $myFile = $_SERVER['DOCUMENT_ROOT'] . '\\ABC\\testFile.txt';
    $fh = fopen($myFile, 'w') or die('can\'t open file');
    $stringData = 'Bobby Bopper\n';
    fwrite($fh, $stringData);
    $stringData = 'Tracy Tanner\n';
    fwrite($fh, $stringData);
    fclose($fh);
?>
4

2 に答える 2

3

あなたのresourcesディレクトリは書き込み可能ではないため、Lithium はコンパイル済みのテンプレートを に書き込むことができませんresources/tmp/cache/templates

編集:resourcesディレクトリが存在することも再確認してください。これは、git リポジトリでバージョン管理されるべきではないためです。

このスニペットを使用して、適切な権限でオンザフライで作成できます: https://gist.github.com/1009460 ( config/bootstrap/libraries.php)

于 2012-08-04T17:38:59.047 に答える
0

問題は、キャッシュの下のテンプレート フォルダーが存在しなかったことです。

ソース管理に追加しなかったため、ディレクトリは存在しませんでした.tmpの下のものはとにかくdevからprdに移動すべきではないからです。テンプレート キャッシュへの書き込みに関する問題は常に存在していましたが、フレームワークへの最近の変更により、php がエラーをブラック ホール化する代わりにエラーをスローするようになりました。

不足しているディレクトリの作成を処理するために、いくつかのコードを template/view/Compiler.php に追加しました。コード ブロックの最初の行は 68 で、変更されていません。同様に、最後の行は変更されていないため、追加されたものと前にあったものを比較できます。

    $compiled = static::compile(file_get_contents($file));

    $pathIsWritable = is_writable($cachePath);      
    if(!$pathIsWritable){
        $exMessage = ' File not writable. ';
        if(!file_exists($cachePath)) {
            $exMessage .= 'Path to file invalid. ';
            $dirCreated = mkdir($cachePath, 0777, true);

            if($dirCreated) {
                $pathIsWritable = true;
            }
            else {
                $exMessage .= 'Attempt to create the directory path failed.';   
            }
        }           
    }

    if ($pathIsWritable && file_put_contents($template, $compiled) !== false) {
        foreach (glob("{$options['path']}/template_{$oname}_*.php") as $expired) {
于 2012-08-06T00:20:19.467 に答える