phpコマンドラインで.phpファイルを実行する場合、実行環境(getcwd())の作業ディレクトリはphp コマンド プログラム (php .exe) を使用するため、ファイル内で相対パスを使用する場合は、まず現在の作業ディレクトリに切り替える必要があります。
小さなテストプログラム:
コードは次のとおりです:
$oldpath = getcwd(); // php.exe が配置されている元の作業ディレクトリ
$path = dirname(__FILE__);
chdir($path); //作業ディレクトリを現在のファイルがあるディレクトリに切り替えます
$fpath = "forum/readme.txt";
$fp = fopen($fpath, "a+b"); // 作業ディレクトリを切り替えないと、ファイルが見つからないエラーが報告されます
fwrite($fp, "oldpath:".$oldpath."-newpath:".getcwd());
fclose($fp);
?>
crotabを使用して定期的に実行する必要があるプログラムにもこの問題が発生します。次の記事を参照してください:
crontabで定期的に実行する必要があるphpスクリプトを使用してスクリプトを作成しましたが、以下のエラーが発生しました
コードは次のとおりです:
コードは以下の通りです:
/var/www/html/bt/e/BtSys:.:/usr/share/pear:/usr/share/phpPHP 警告: require(../class/connect.php): ストリームを開けませんでした: そのようなものはありません/var/www/html/bt/e/BtSys/torrents-scrape.php の 17 行目のファイルまたはディレクトリ
PHP 致命的エラー: require(): 必要な '../class/connect.php' を開くことができませんでした (include_path='/var/www/html/bt/e/BtSys:.:/usr/share/pear:/usr /share/php') /var/www/html/bt/e/BtSys/torrents-scrape.php の 17 行目
解決策1を試して、次のコードを追加してください
コードは以下の通りです:
// インクルードパスの設定
$cur_dir=getcwd();
$cur_dir=$basedir = dirname(__FILE__);
$path = ini_get('include_path');
ini_set("include_path", "$cur_dir:$path");
$path = ini_get('include_path');
//echo $path;
require(../class/a.php)
require(../class/b.php)
……
実行に失敗しました
解決策 2 を試して、次のコードを追加してください
コードは次のとおりです:
$cur_dir = ディレクトリ名(__FILE__);
chdir($cur_dir);
require(../class/a.php)
require(../class/b.php)
正常に実行されました
要約: 相対ディレクトリである場合、crontab で php スクリプトを実行するときに、スクリプトが配置されているディレクトリを入力する必要があります