0

ファイルに書き込む d PHP スクリプトを取得しようとincludeしていますが、パスが思いどおりに解決されません。シナリオは次のとおりです。

実行中のスクリプト (呼び出しスクリプト) は Web アクセス可能です。入力をhttp://example.com/script1.php省略できるように、example.com の絶対パスの Apache ドキュメント ルートは /home/jweinberger/com.example/ とします。

(絶対パス) に別のスクリプトがあります。/home/jweinberger/scripts/script2.php.

script1.php には、問題なく動作する が含まれてinclude('/home/jweinberger/script2.php)います。

script2.php はfopen('/home/jweinberger/logs/script1.log')どれが失敗するかを試みます。エラーメッセージには、開こうとしていることが示されています。

/home/jweinberger/com.example/logs/script1.log//home/jweinberger/logs/script1.log

明らかに、呼び出し元のスクリプトの Apache ドキュメント ルートを先頭に追加していますが、これは望ましくありません。

すべてのパスを絶対に指定しました (相対パスはまったく指定しません)。safe_modeがオフで、doc_root が空で、cgi.force_redirect が php.ini に設定されていません。これはPHP 5.2.17(私の Web ホストによって提供されます - 私はアップグレードを制御できません)

そして、問題があれば、script2.php は CGI によって呼び出されたときではなく、CLI スクリプトによって呼び出されたときに正しいファイルを正常に開きます。

script2.php で正しいファイルを正常に開くために私ができることについて、誰かアドバイスや指示を与えることはできますか?

大変ありがたく存じます。

4

2 に答える 2

0

meda は私に答えを見つける手がかりを与えてくれました。

私のエラーは、ファイル名を作成する方法にありました。現在のスクリプト名の先頭に「/home/jweinberger/logs」を追加していましたが、現在のスクリプト名はフル パスであるため、これは誤りです。

代わりに basename(current script name) を使用すると、正常に機能しました。

単純な見落とし。ここで誰かに役立つことを願っています

于 2013-08-09T16:01:26.800 に答える
0

パスがで始まる場合、/CLI では問題ないルート ファイルシステムを指しますが、CGI は次のように理解します。

/home/jweinberger/com.example/logs/script1.log//home/jweinberger/logs/script1.log

配列のインデックスを使用する必要があります'DOCUMENT_ROOT'$_SERVER

fopen($_SERVER['DOCUMENT_ROOT'].'/home/jweinberger/logs/script1.log') 
于 2013-08-05T01:14:47.370 に答える