When executing .php files under the php command line, the working directory of the execution environment (getcwd()) is the directory where the php command program (php.exe) is located, so if you want to use relative paths in the file, you must first switch to the current working directory.
Small test program:
Copy code The code is as follows:
$oldpath = getcwd(); // Original working directory The directory where php.exe is located
$path = dirname(__FILE__);
chdir($path); //Switch the working directory to the directory where the current file is located
$fpath = "forum/readme.txt";
$fp = fopen($fpath, "a b"); // If you do not switch the working directory, a file not found error will be reported
fwrite($fp, "oldpath:".$oldpath."-newpath:".getcwd());
fclose($fp);
?>
Programs that need to be executed regularly using crotab will also have this problem. You can refer to the following article:
I wrote a script using php script, which needs to be run regularly in crontab, but the following error occurred
The code is as follows:
Copy code The code is as follows:
/var/www/html/bt/e/BtSys:.:/usr/share/pear:/usr/share/phpPHP Warning: require(../class/connect.php): failed to open stream: No such file or directory in /var/www/html/bt/e/BtSys/torrents-scrape.php on line 17
PHP Fatal error: require(): Failed opening required '../class/connect.php' (include_path='/var/www/html/bt/e/BtSys:.:/usr/share/pear:/usr/ share/php') in /var/www/html/bt/e/BtSys/torrents-scrape.php on line 17
Try solution 1 and add the following code
Copy code The code is as follows:
// setting include path
$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)
.............
Failed to run
Try solution 2 and add the following code
Copy the code as follows:
Copy code The code is as follows:
$cur_dir = dirname(__FILE__);
chdir($cur_dir);
require(../class/a.php)
require(../class/b.php)
Run successfully
Summary: When requiring, if it is a relative directory, when running the php script in crontab, you have to enter the directory where the script is located