From: rdingman at next-online dot net Operating system: Mac OS X 10.4.3 PHP version: 5.1.1 PHP Bug Type: Scripting Engine problem Bug description: Lack of read permission on main script results in E_WARNING
Description: ------------ If I access http://localhost/foo.php and PHP does not have permission to read foo.php (say the permissions are 222), I get an E_WARNING rather than an E_COMPILE_ERROR (include vs. require). This is in PHP 5.1.1. I've fixed this in a local build by patching zend_execute_scripts in Zend/zend.c on line 1079. zend_execute_scripts was calling zend_compile_file and passing ZEND_INCLUDE in as the type argument rather than passing along its type argument. The old code reads: EG(active_op_array) = zend_compile_file(file_handle, ZEND_INCLUDE TSRMLS_CC); My patched version reads: EG(active_op_array) = zend_compile_file(file_handle, type TSRMLS_CC); Because I'm not intimately familiar with the inner workings of the interpreter, I'm not sure that this is the best way to fix this problem, but it seems like the most appropriate place that I could find. Expected result: ---------------- If PHP does not have permission to read the main script, I would expect to get an E_COMPILE_ERROR. The difference is treating reading the main script as if it where required rather than included. The main script should be treated as if it were required rather than included. In case you are wondering why I care -- we have a PHP module that monitors PHP errors and redirects our customers to a customer service page any time that PHP encounters anything that the interpreter really shouldn't recover from (E_CORE_ERROR, E_ERROR, E_PARSE, E_COMPILE_ERROR and E_USER_ERROR). The main script not being readable is certainly a case where we would like to redirect them to a customer service page. However, having an E_WARNING as the error makes it difficult to identify this situation because we would now have to distinguish between this E_WARNING and any others that might arise in the site. Having an E_COMPILE_ERROR would be much more definitive and more correct IMHO. Yes, we are taking other steps to ensure that the permission on the PHP scripts for our site are correct, but mistakes do happen and we want to guarantee that our customers have as good an experience as possible in the case of unexpected errors (as any enterprise site should). Actual result: -------------- If PHP does not have permission to read the main script, I get the following E_WARNING: Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0 Warning: Unknown: Failed opening '/Library/WebServer/ Documents/foo.php' for inclusion (include_path='/usr/local/ lib/php:.') in Unknown on line 0 -- Edit bug report at http://bugs.php.net/?id=35512&edit=1 -- Try a CVS snapshot (PHP 4.4): http://bugs.php.net/fix.php?id=35512&r=trysnapshot44 Try a CVS snapshot (PHP 5.1): http://bugs.php.net/fix.php?id=35512&r=trysnapshot51 Try a CVS snapshot (PHP 6.0): http://bugs.php.net/fix.php?id=35512&r=trysnapshot60 Fixed in CVS: http://bugs.php.net/fix.php?id=35512&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=35512&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=35512&r=needtrace Need Reproduce Script: http://bugs.php.net/fix.php?id=35512&r=needscript Try newer version: http://bugs.php.net/fix.php?id=35512&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=35512&r=support Expected behavior: http://bugs.php.net/fix.php?id=35512&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=35512&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=35512&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=35512&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=35512&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=35512&r=dst IIS Stability: http://bugs.php.net/fix.php?id=35512&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=35512&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=35512&r=float No Zend Extensions: http://bugs.php.net/fix.php?id=35512&r=nozend MySQL Configuration Error: http://bugs.php.net/fix.php?id=35512&r=mysqlcfg
