cronという名前のフォルダーの下にあるCakePHPルートフォルダーにファイルがあります。パスは次のとおりです。
c:/wamp/www/project/cron/daily.php
このファイルには、次のように、ケーキ構造のベンダーフォルダ内に配置された別のファイルが必要です。
require("/../vendors/phpMailer/class.phpmailer.php");
そして、私はこのdaily.phpをタスクスケジューラから実行します。これが私の開発サイト(Windowsシステム)のシナリオです。期待どおりに正常に動作します。プロジェクトをUbuntu(本番サイト)に移行すると、requireステートメントが問題を引き起こし始めました。必要なファイルが見つかりません。そこで、次のように小さな変更を加えました。
require("../vendors/phpMailer/class.phpmailer.php"); <= removed the preceding slash
そしてそれはうまくいった。ですから、私の疑問は、未亡人とLinuxで親ディレクトリ表記がどのように機能するかに違いがあるのでしょうか。もしそうなら、どうすればこれを克服できますか?プロジェクトを開発サイト(Windows)から本番サイト(Linux)に移動するたびにスラッシュを削除することは現実的ではありません。
私はこれを試しました:
require("./../vendors/phpMailer/class.phpmailer.php");
Linuxで動作しました。しかし、Windowsで「そのようなファイルディレクトリはありません」というエラーが発生しました。Windowsは以下でのみ機能するようです:
require("/../vendors/phpMailer/class.phpmailer.php");
解決
@TWCrapのヘルプから、問題は次のように解決されました。
require(dirname(__FILE__)."/../vendors/phpMailer/class.phpmailer.php");
WindowsとLinuxの両方で動作します(*喜びの涙*)。ただし、Windowsでは、次のようにパスが生成されます。
C:\wamp\www\project\cron/../vendors/phpMailer/class.phpmailer.php
この道は醜く見えます、そして私はそれが将来問題を引き起こさないことを願っています!
-みんなありがとう!