Relative path not working in cron PHP script
If a PHP script is run as a cron script, the includes often fail if relative paths are used. For example, if you have
require_once('foo.php');
the file foo.php will be found when run on the command line, but not when run from a cron script.
A typical workaround for this is to first chdir to the working directory, or use absolute paths. I would like to know, however, what is different between cron and shell that causes this behavior. Why does it fail when using relative paths in a cron script?
Solution 1:
Change the working directory to the running file path. Just use
chdir(dirname(__FILE__));
include_once '../your_file_name.php'; //we can use relative path after changing directory
in the running file. Then you won't need to change all the relative paths to absolute paths in every page.
Solution 2:
The working directory of the script may be different when run from a cron. Additionaly, there was some confusion about PHPs require() and include(), which caused confusion about the working directory really being the problem:
include('foo.php') // searches for foo.php in the same directory as the current script
include('./foo.php') // searches for foo.php in the current working directory
include('foo/bar.php') // searches for foo/bar.php, relative to the directory of the current script
include('../bar.php') // searches for bar.php, in the parent directory of the current working directory