When executing a .php file 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:
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:
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
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)
................
Operation failed
Try solution 2 and add the following code
The code is as follows:
$cur_dir = dirname(__FILE__);
chdir($cur_dir);
require(../class/a.php)
require(../class/b.php)
Running 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