1

わかりました。始める前に、OSX/BSD の話題に関しては、私は完全に無知であるとだけ言っておくべきだと思います。私は過去 1 週間ほど MBP を取得したばかりで、HEAPS を学習しています。それにもかかわらず、私はまだいくつかのことを頭に入れようとしているので、優しくしてください. :)

さて、私の問題に進みます。数日間、ローカル開発環境をセットアップしようとしています。OS に付属の Apache 2.2 と PHP 5.3.3 を有効にしました。また、MySQL、Homebrew を手動でインストールし、BIND をセットアップしました (vhost の管理を容易にするため)。PEAR もインストールする必要があることに気付くまで、すべてがうまく機能しているように見えました。

残念ながら、私の会社の製品の重要な部分の多くは PEAR ライブラリに大きく依存しているため、先に進む前にすべてが稼働していることを確認する必要がありました。PEAR をインストールするには、次の手順を実行しました。

  1. $ cd /usr/local/
  2. $ カールhttp://pear.php.net/go-pear | 須藤php
  3. $ php -q go-pear.php
  4. PEAR のインストール手順に進む
  5. $ mate ~/.bash_profile
  6. /usr/local/bin を $PATH 変数に追加しました
  7. 保存して閉じた TextMate
  8. $ which pear (PEAR 実行可能ファイルの場所を確認)
  9. $ php -r "phpinfo();" | | grep '.ini' (現在の php.ini の場所を確認するため)
  10. $ mate /etc/php.ini
  11. 「include_path」設定を「.:/usr/local/PEAR」に変更しました
  12. 保存して閉じた TextMate
  13. $ sudo apachectl 再起動
  14. 結果に満足したので、いくつかの重要な PEAR パッケージ (HTTP、NET など) のインストールを開始します。

次に、SVN リポジトリの 1 つの最新リビジョンのチェックアウトを終了し、アプリをインストールします。ブラウザ経由でアクセスしようとすると、次のようなエラーが発生します。

 Warning: require_once(HTTP/Request2.php): failed to open stream: No such file or directory in /Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/apps/Mpx/Poller.class.php on line 8

Call Stack:
    0.0003     651400   1. {main}() /Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/call.php:0
    0.0028     927096   2. RXML_Config::autoload() /Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/config/autoload.php:0
    0.0040    1144272   3. require_once('/Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/apps/Mpx/Poller.class.php') /Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/config/autoload.php:18


Fatal error: require_once(): Failed opening required 'HTTP/Request2.php' (include_path='.:/usr/local/PEAR;/Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/Library/Pear/') in /Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/apps/Mpx/Poller.class.php on line 8

Call Stack:
    0.0003     651400   1. {main}() /Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/call.php:0
    0.0028     927096   2. RXML_Config::autoload() /Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/config/autoload.php:0
    0.0040    1144272   3. require_once('/Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/apps/Mpx/Poller.class.php') /Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/config/autoload.php:18

これらのファイルの場所を確認できます。それらは存在し、適切なディレクトリにあります。私の理解では、'.:/usr/local/PEAR' の 'include_path' を使用すると、PHP は最初に呼び出しスクリプトと同じディレクトリを検索し、何も見つからない場合はリスト内の次のパスに移動します。最後のケースでは、/usr/local/PEAR である必要がありますが、何も表示されません。

エラー レポートからわかる唯一の奇妙な点は、2 番目のセクションの次のビットです。

(include_path='.:/usr/local/PEAR;/Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/Library/Pear/')

「.:/usr/local/PEAR」の後にセミコロンがあり、別の (有効な) パスが追加されています。この特定のパスについては心配していませんが、セミコロンが原因で、PHP が最初のコロン以降のすべてを単一のパスと見なしてしまうことが懸念されます。その場合、PHP が PEAR ライブラリを見つけられないのは理にかなっています。

私が言及したことを考えると、他の誰かがこの問題について何らかの理由を考えたり、洞察を提供したりできますか? ありがとうヒープス!

編集:

よし、これで解決。ターミナルで次のコマンドを実行しました。

$ grep -r -i ini_set("include_path {path/to/project}

ああ、私は次のことを見つけました:

ini_set("include_path", ini_get("include_path") . ";" . __CONFIG_PATH_LIBRARY_PEAR);

「;」の置き換え PATH_SEPARATOR を使用すると、問題がうまく修正されました。

ジェイコブに感謝します!:)

4

1 に答える 1

1

プロジェクトで set_include_path または public/Library/Pear/ を検索します

インクルード パスのどこかに追加している可能性があり、PHP 定数 PATH_SEPARATOR の代わりにセミコロンを使用しているように見えます。これにより、OS の正しい区切り文字が得られます。

于 2011-02-23T03:44:15.833 に答える