#26073 [Opn->Csd]: ob_start callback function changes cwd

From: Date: Thu, 16 Sep 2004 14:24:43 +0000
Subject: #26073 [Opn->Csd]: ob_start callback function changes cwd
References: 1  Groups: php.doc 
Request: Send a blank email to phpdoc+get-969364133@lists.php.net to get a copy of this message
ID: 26073 Updated by: vrana@php.net Reported By: php at trancer dot nl -Status: Open +Status: Closed Bug Type: Documentation problem Operating System: Debian Linux PHP Version: 4.3.3 New Comment: This bug has been fixed in the documentation's XML sources. Since the online and downloadable versions of the documentation need some time to get updated, we would like to ask you to be a bit patient. Thank you for the report, and for helping us make our documentation better. "Some web servers (e.g. Apache) change the working directory of a script when calling the callback function. You can change it back by e.g. chdir(dirname($_SERVER['PHP_SELF'])) in the callback function." Previous Comments: ------------------------------------------------------------------------ [2003-12-04 08:48:07] Leblanc at phpzipscript dot org here is a workaround I use to avoid such problems (I also use it with CLI scripts to avoid path troubles when launching a script from a different directory). At the beginning of the script add : <?php define("SCRIPTPATH", str_replace("\\", "/", realpath(dirname(__FILE__)))); ?> in your ob() callback you now need to do : <?php // Ob callback function ob($buffer) { return file_get_contents(SCRIPTPATH.'/open.txt'); } ob_start('ob'); ?> /Leblanc ------------------------------------------------------------------------ [2003-11-03 19:32:02] sniper@php.net It's not PHP that changes the cwd but Apache. ------------------------------------------------------------------------ [2003-11-01 21:29:13] php at trancer dot nl Description: ------------ A script that does file_get_contents or file in the callback function of ob_start wont work. The file_get_contents function cant open the file. <?php // Ob callback function ob($buffer) { return file_get_contents('open.txt'); } ob_start('ob'); ?> The behaviour is so because the callback sets its cwd to the root of the disk instead of the folder the script was called from. If I copy the file I want to open to my root it can open, otherwise it will throw me this error. Warning: file_get_contents(open.txt): failed to open stream: No such file or directory in /var/www/test.php on line 6 Specifying the full path works. Could be a possible bug in the callback, otherwise a documentation problem because I was unable to find it anywhere in the docs. Reproduce code: --------------- <?php // Ob callback function ob($buffer) { return file_get_contents('open.txt'); } ob_start('ob'); ?> Expected result: ---------------- The content of open.txt Actual result: -------------- Warning: file_get_contents(open.txt): failed to open stream: No such file or directory in /var/www/test.php on line 6 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=26073&edit=1

« previous php.doc (#969364133) next »