1

親ディレクトリからphpファイルをインクルードしようとすると、エラーが発生します。

admin @ webby:〜$ /usr/bin/php /var/phpscripts/email_parser/tests/_email-test.php PHP致命的なエラー:require_once():必要な'../PlancakeEmailParser.php'(include_path='を開くことができませんでした。 :/ usr / share / php:/ usr / share / pear')6行目の/var/phpscripts/email_parser/tests/_email-test.php

致命的なエラー:require_once():/ var / phpscripts / email_parser / tests /_emailのrequired'../PlancakeEmailParser.php'(include_path ='.:/usr/share/php:/usr/share/pear')を開くことができませんでした-6行目のtest.php

PHPファイル

#!/usr/bin/php
<?php
error_reporting(E_ALL ^ E_NOTICE ^E_WARNING);
ini_set("display_errors" , 1);

require_once("../PlancakeEmailParser.php");

// etc

?>

フォルダ構造

admin@webby:/var/phpscripts/email_parser$ find .
.
./composer.json
./README.txt
./LICENSE.txt
./PlancakeEmailParser.php
./tests
./tests/_email-test.php

テストのためPlancakeEmailParser.phpに、ディレクトリに移動してtests「../」をrequireから削除すると正常に動作します

4

2 に答える 2

5

この線

require_once("../PlancakeEmailParser.php");

完全修飾ファイルシステムパスまたはPHP-URIスキームを使用していません。したがって、その結果はPHP構成に依存します。ほとんどの場合、インクルードディレクトリ構成が原因です。

PHP CLIは、Webサーバーとは異なる構成ファイルを使用できます-または-作業ディレクトリはWebサーバーとは異なります(おそらく、後者が特定のシナリオでより多くの役割を果たします)。

あなたが望むものは、完全に修飾されたものを簡単に表現することもできます:

require_once(__DIR__ . "/../PlancakeEmailParser.php");

これはおそらくあなたが探しているものです。

于 2012-12-27T17:01:24.330 に答える
1

PHP CLI SAPIからの引用:他のSAPIとの違い:

作業ディレクトリはスクリプトのディレクトリに変更されません。(互換性のために保持されている-Cおよび--no-chdirスイッチ)

スクリプト内の相対パスをそのまま機能させるには、ディレクトリをスクリプトが存在する場所に変更してから、スクリプトを実行します。

cd /var/phpscripts/email_parser/tests/ && ./_email-test.php
于 2012-12-28T11:44:10.133 に答える