0

うまくいかない Web サイトに ZendFramework を含めようとしています。最近、次のように .htaccess ファイルを変更してみました。

php_value include_path ":/home/u230474/Zend"

私も試しました

php_value include_path ".:/home/u230474/Zend"

しかし、いずれの場合も、Web サイトのどのページも表示できなくなっていました。

システムに次のコードを理解させようとしているので、これらの変更を行いました。

<?php 
$libreria='/Zend/ZendFramework/library';
set_include_path(get_include_path().PATH_SEPARATOR.$libreria);
require_once('Zend/Loader/Autoloader.php');
Zend_Loader_Autoloader::getInstance(); 

私は何日も前からいろいろなことを試してきましたが、条件を理解するのに問題があるようです。

Zend Framework のインストールの成功を示すことになっている InstallationChecker.php というスクリプトを使用して、ZendFramework のインストールを確認するテストを行いましたが、実際にはスクリプトは次のようなエラーをスローします。

Exception thrown trying to access Zend/Loader.php using 'use_include_path' = true. Make sure you include Zend Framework in your include_path which currently contains: .:/usr/lib/php:/usr/local/lib/php

.htaccess を変更しようとしたのはそのためです

私が間違ったことをしているかどうか誰かが知っていますか(明らかにそうです)?`/usr/lib/php と /usr/local/lib/php も含まれるように htaccess ファイルを変更する正しい方法は何ですか?

また、htaccess を含める場合は、含めるすべてのサブディレクトリに .htaccess ファイルも含める必要があることを読みました。ほとんどの php スクリプトは public フォルダーに直接配置されていますが、サブディレクトリにも多くのスクリプトがあります。どのように進めればよいですか?

Mike のアドバイスに従っていくつかの変更を加え、次のようなカスタム パス全体を含めました。

$libreria='Zend/ZendFramework/library/Zend/Loader';

次に、php.info を確認しましたが、include_path への変更はまだ表示されていません。さらに、ZendFramework がインストールされているかどうかを確認するために実行しているテストのエラーが、Zend フォルダーにクラス Loader.php があることを示していることに気付きました。これは実際にはそこにありますが、まだ何も読み込まれません。

わかりましたので、Zend Framework が正常にロードされているように見えるので、何が問題なのかを確認するためにいくつかのテストを行いました。最初に、このコードをファイル 'libreria.php' に追加して、インクルード パスを設定します (ライブラリが読み込まれているので、問題ないようです)。これは私がしました:

$libreria='/home/u230474/public_classes/Zend/ZendFramework/library';
set_include_path(get_include_path().PATH_SEPARATOR.$libreria);
require_once('Zend/Loader/Autoloader.php');
$libload = Zend_Loader_Autoloader::getInstance();
if(!$libload) echo "Librer&iacute;a Zend Framework cargada"; else echo "Error al cargar la librer&iacute;a";

その結果、「Error al cargar la libreria」が出力されます。

また、大文字と小文字の区別に問題があるかどうかを確認するための小さなテストも設定しました。問題が発生している一部のページでは、ヘッダーとライブラリをインクルードした直後に次のコードを追加しました。

//codigo para probar equidad de nombre de archivo---------->
$filename = basename($_SERVER['SCRIPT_FILENAME']);
$request = basename($_SERVER['SCRIPT_NAME']);
if($filename != $request)
  die('Case of filename and request do not match!');

そして死なないので大丈夫です。(ブラウザのアドレスで見られるファイル名とサーバーで見られるファイル名にわずかな違いがあった場合、結果は異なりますが、間違っている可能性があります)。

次に、Autoloader.php クラスを呼び出す方法で何かが起こっていますが、「Autoloader、基本的な使用法」と書かれている Zend の Autoloader ドキュメントの紹介にある静的メソッドとは異なる呼び出し方法は見当たりません。

4

1 に答える 1

1

.htaccess はおそらくこの変更を行う場所ではありません。既存のパスに含めたい新しいパスを追加するのがより困難になるからです。あなたがしたことは、すべてのインクルード パスを .htaccess で指定したものだけで上書きすることでした。これは物事を爆破しました。

インクルードした PHP コードの 2 行目を見ると、インクルード パスに追加する方法が示されています (現在のパスを取得し、それに新しいパスを追加することによって)。インクルードするパスに対しても同様の操作を行ってください。

于 2012-10-24T00:34:48.863 に答える