#35512 [NEW]: Lack of read permission on main script results in E_WARNING
| From: | rdingman at next-online dot net | Date: | Thu, 01 Dec 2005 21:40:26 +0000 |
| Subject: | #35512 [NEW]: Lack of read permission on main script results in E_WARNING | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-89613@lists.php.net to get a copy of this message | ||
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