Php fopen relative path broken - mystery
I know "something had to be changed", but my code seems to have broken at night for no reason.
My server-to-server structure looks something like this:
/
/ scripts
/ audit
/ other_things
I have a script (let's say it's called "/scripts/MyScript.php") in the "scripts" folder that collects data from a web page using curl and saves a dated copy of the web page that it reads into the "audit" folder ...
To write to the audit folder, I used
$ fh = fopen ("./audit/2008-09-09-183000.backup.log", "w");
however, what stopped working by throwing
[function.fopen]: Failed to open stream: No such file or directory in /home/web/website.co.uk/audit/2008-09-09-183000.backup.log on line 353
However, I fixed this by changing the path to
"../audit/2008, etc." from "./audit/2008" (two full stops / periods instead of one)
Logic dictates that something should have changed in the server configuration, but what? This is a dedicated server that I manage. How can I avoid repeating something like this?
I even went through SVN for MyScript.php and all previous versions used single. on my way.
source to share
Use dirname(__FILE__)
to get the file system path for the current file. Then use relative paths from there to find the directory audit
.
For example, within scripts/MyScript.php
, dirname(__FILE__)
will return /home/web/website.co.uk/scripts
. You can reliably add /../audit
to this.
(Note that this even works on file include
d or require
d - in which case it will return the directory where the included file is located).
source to share
Your CWD (current working directory) has changed, it was the document root, and now it is root / scripts.
This could be due to the path used to access the script, for example if you did this before http://website.co.uk/MyScript.php due to some url rewriting or whatever, and now you access http://website.co.uk/scripts/MyScript.php .
I seem to remember there are other possible criminals, but I can't remember them. Have you fought with some rewriting rules or URLs? (i.e. started using PATH_INFO?)
source to share