Bug #79811 [Nab]: Script stops and delivers incomplete web page
| From: | buschmann at nidsa dot net | Date: | Thu, 09 Jul 2020 13:47:44 +0000 |
| Subject: | Bug #79811 [Nab]: Script stops and delivers incomplete web page | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-227921@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=79811&edit=1
ID: 79811
User updated by: buschmann at nidsa dot net
Reported by: buschmann at nidsa dot net
Summary: Script stops and delivers incomplete web page
Status: Not a bug
Type: Bug
Package: PostgreSQL related
Operating System: Windows Server 2019 64bit
PHP Version: 8.0.0alpha2
Block user comment: N
Private report: N
New Comment:
In my case this does not throw a fatal error.
Have you tested my script under Windows?
I have error_log enabled, E_ALL.
In the error log I only get 1 line per call as:
[09-Jul-2020 15:35:53 Europe/Berlin] PHP Warning: Undefined variable $rSOrder in
N:\cpsdev\cps\cps_pg\hbtest.php on line 34
and then nothing more.
I have tried it on the same machine with php 7.4.8 and get multiple lines of
[09-Jul-2020 15:28:58 Europe/Berlin] PHP Notice: Undefined variable: rSOrder in
N:\cpsdev\cps\cps_pg\hbtest.php on line 34
[09-Jul-2020 15:28:58 Europe/Berlin] PHP Warning: pg_fetch_assoc() expects parameter 1 to be
resource, null given in N:\cpsdev\cps\cps_pg\hbtest.php on line 34
...
but the script terminates and shows all content in browser (view source).
I have switched back to the php8 delivered pqlib.dll but same error.
Here are my current error settings from phpinfo:
PHP Version 8.0.0alpha2
Directive Local Value Master Value
allow_url_fopen On On
allow_url_include Off Off
arg_separator.input & &
arg_separator.output & &
auto_append_file no value no value
auto_globals_jit On On
auto_prepend_file no value no value
browscap no value no value
default_charset UTF-8 UTF-8
default_mimetype text/html text/html
disable_classes no value no value
disable_functions no value no value
display_errors Off Off
display_startup_errors On On
doc_root no value no value
docref_ext no value no value
docref_root no value no value
enable_dl Off Off
enable_post_data_reading On On
error_append_string no value no value
error_log L:/ZZ_log/php_log_prod/php_err.log L:/ZZ_log/php_log_prod/php_err.log
error_prepend_string no value no value
error_reporting 32767 32767
expose_php On On
extension_dir N:\Apache\php8\ext N:\Apache\php8\ext
file_uploads On On
hard_timeout 2 2
highlight.comment #FF8000 #FF8000
highlight.default #0000BB #0000BB
highlight.html #000000 #000000
highlight.keyword #007700 #007700
highlight.string #DD0000 #DD0000
html_errors On On
ignore_repeated_errors On On
ignore_repeated_source Off Off
ignore_user_abort Off Off
implicit_flush Off Off
include_path .;C:\php\pear .;C:\php\pear
input_encoding no value no value
internal_encoding no value no value
log_errors On On
log_errors_max_len 4096 4096
mail.add_x_header On On
mail.force_extra_parameters no value no value
mail.log no value no value
max_execution_time 600 600
max_file_uploads 20 20
max_input_nesting_level 64 64
max_input_time 60 60
max_input_vars 20000 20000
memory_limit 512M 512M
open_basedir no value no value
output_buffering 4096 4096
output_encoding no value no value
output_handler no value no value
post_max_size 8M 8M
precision 14 14
realpath_cache_size 4096K 4096K
realpath_cache_ttl 120 120
register_argc_argv Off Off
report_memleaks On On
report_zend_debug On On
request_order GP GP
sendmail_from no value no value
sendmail_path no value no value
serialize_precision 17 17
short_open_tag Off Off
SMTP localhost localhost
smtp_port 25 25
sys_temp_dir no value no value
syslog.facility LOG_USER LOG_USER
syslog.filter no-ctrl no-ctrl
syslog.ident php php
unserialize_callback_func no value no value
upload_max_filesize 2M 2M
upload_tmp_dir O:/cpsprod/tmp_upload O:/cpsprod/tmp_upload
user_dir no value no value
user_ini.cache_ttl 300 300
user_ini.filename .user.ini .user.ini
variables_order GPCS GPCS
windows.show_crt_warning Off Off
xmlrpc_error_number 0 0
xmlrpc_errors Off Off
zend.assertions 1 1
zend.detect_unicode On On
zend.enable_gc On On
zend.exception_ignore_args Off Off
zend.multibyte Off Off
zend.script_encoding no value no value
Previous Comments:
------------------------------------------------------------------------
[2020-07-09 13:28:00] nikic@php.net
Your script produces:
Warning: Undefined variable $rSOrder in /home/nikic/php/php-src/t036.php on line 34
Fatal error: Uncaught TypeError: pg_fetch_assoc(): Argument #1 ($result) must be of type resource,
null given in /home/nikic/php/php-src/t036.php:34
Stack trace:
#0 /home/nikic/php/php-src/t036.php(34): pg_fetch_assoc(NULL)
#1 {main}
thrown in /home/nikic/php/php-src/t036.php on line 34
Exactly as expected and explained before. If you do not see the error message, you need to look at
your error handlers and your error related ini settings (do you have error_reporting=E_ALL? Do you
have at least one of display_errors=1 or enabled logging? If you are logging, did you check your
log?)
In any case, this is not a bug in PHP.
------------------------------------------------------------------------
[2020-07-09 13:24:29] buschmann at nidsa dot net
I have condensed the original script to a short version (even missing the connection to the
database).
This reproduces the same error (abrupt script termination):
<?php
session_start ();
function searchOrder(){
global $fSOrder,$rSOrder,$book,$iden,$style,$season,$file,$only;
echo 'inside searchOrder';
}
?>
<!DOCTYPE html>
<html>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><h2 style="margin-left:4px;">BOX</h2></td>
<td><input type="text" name="Txt_SizeA1AP"
class="CuadroTextoOtro" style="width:25px;" disabled readonly="yes"
value=""/></td>
<td><input type="text" name="Txt_SizeA2AP"
class="CuadroTextoOtro" style="width:25px;" disabled readonly="yes"
value=""/></td>
<td><input type="text" name="Txt_SizeA3AP"
class="CuadroTextoOtro" style="width:25px;" disabled readonly="yes"
value=""/></td>
<td><input type="text" name="Txt_SizeA4AP"
class="CuadroTextoOtro" style="width:25px;" disabled readonly="yes"
value=""/></td>
<td><input type="text" name="Txt_SizeA5AP"
class="CuadroTextoOtro" style="width:25px;" disabled readonly="yes"
value=""/></td>
<td><input type="text" name="Txt_SizeA6AP"
class="CuadroTextoOtro" style="width:25px;" disabled readonly="yes"
value=""/></td>
<td><input type="text" name="Txt_SizeA7AP"
class="CuadroTextoOtro" style="width:25px;" disabled readonly="yes"
value=""/></td>
<td><input type="text" name="Txt_SizeA8AP"
class="CuadroTextoOtro" style="width:25px;" disabled readonly="yes"
value=""/></td>
<td><input type="text" name="Txt_SizeA9AP"
class="CuadroTextoOtro" style="width:25px;" disabled readonly="yes"
value=""/></td>
<td><input type="text" name="Txt_SizeA10AP"
class="CuadroTextoOtro" style="width:25px;" disabled readonly="yes"
value=""/></td>
<td><input type="text" name="Txt_SizeA11AP"
class="CuadroTextoOtro" style="width:25px;" disabled readonly="yes"
value=""/></td>
<td><input type="text" name="Txt_SizeA12AP"
class="CuadroTextoOtro" style="width:25px;" disabled readonly="yes"
value=""/></td>
<td><h2 style="margin-left:2px;">TOTAL</h2></td>
</tr>
<?php
for($i=0;$i<=7;$i++){
//HB @$fSOrder=pg_fetch_assoc($rSOrder);
$fSOrder=pg_fetch_assoc($rSOrder);
echo "<tr>";
echo "<td><input type='text' name=Txt_BoxAAP$i
class='TextoSubFicha' style='width:30px; background-color:#FFFFFF;
font-weight:bold;' onBlur=\"calPairs('box',this.name,$i);\"/><input
type='hidden' name='Txt_id_a$i' value='0'/></td>";
echo "<td><input type='text' name=Txt_CantSizeA1AP$i
class='CuadroTallas' onChange=\"calPairs('assorted',this.name,$i)\"
disabled/></td>";
echo "<td><input type='text' name=Txt_CantSizeA2AP$i
class='CuadroTallas' onChange=\"calPairs('assorted',this.name,$i)\"
disabled/></td>";
echo "<td><input type='text' name=Txt_CantSizeA3AP$i
class='CuadroTallas' onChange=\"calPairs('assorted',this.name,$i)\"
disabled/></td>";
echo "<td><input type='text' name=Txt_CantSizeA4AP$i
class='CuadroTallas' onChange=\"calPairs('assorted',this.name,$i)\"
disabled/></td>";
echo "<td><input type='text' name=Txt_CantSizeA5AP$i
class='CuadroTallas' onChange=\"calPairs('assorted',this.name,$i)\"
disabled/></td>";
echo "<td><input type='text' name=Txt_CantSizeA6AP$i
class='CuadroTallas' onChange=\"calPairs('assorted',this.name,$i)\"
disabled/></td>";
echo "<td><input type='text' name=Txt_CantSizeA7AP$i
class='CuadroTallas' onChange=\"calPairs('assorted',this.name,$i)\"
disabled/></td>";
echo "<td><input type='text' name=Txt_CantSizeA8AP$i
class='CuadroTallas' onChange=\"calPairs('assorted',this.name,$i)\"
disabled/></td>";
echo "<td><input type='text' name=Txt_CantSizeA9AP$i
class='CuadroTallas' onChange=\"calPairs('assorted',this.name,$i)\"
disabled/></td>";
echo "<td><input type='text' name=Txt_CantSizeA10AP$i
class='CuadroTallas' onChange=\"calPairs('assorted',this.name,$i)\"
disabled/></td>";
echo "<td><input type='text' name=Txt_CantSizeA11AP$i
class='CuadroTallas' onChange=\"calPairs('assorted',this.name,$i)\"
disabled/></td>";
echo "<td><input type='text' name=Txt_CantSizeA12AP$i
class='CuadroTallas' onChange=\"calPairs('assorted',this.name,$i)\"
disabled/></td>";
echo "<td><input type='text' name=Txt_TotalAAP$i
class='TextoSubFicha' style='width:35px; background-color:#FFFFFF;
font-weight:bold;' readonly='yes'/></td>";
echo "</tr>";
}
echo 'past for loop';
?>
</table>
</html>
------------------------------------------------------------------------
[2020-07-09 08:24:55] cmb@php.net
The point is that pg_fetch_assoc($rSOrder) is called while
$rSOrder is undefined. This is supposed to throw a TypeError in
PHP 8. This TypeError is apparently caught by your script (maybe
by set_error_handler() or set_exception_handler()). At least for
debugging purposes, you could rewrite
@$fSOrder=pg_fetch_assoc($rSOrder);
to
$fsOrder = isset($rSOrder) ? pg_fetch_assoc($rSOrder) : [];
or so.
------------------------------------------------------------------------
[2020-07-09 07:09:30] buschmann at nidsa dot net
I have tried it with opcache disabled, same error:
The Zend OPcache extension is installed but not active
The code comes from the php 4 era and has no explicit exception handling.
The variable $rSOrder is only declared inside of this function as global and not set before.
It should be easyly reproducable by declaring the function, calling the loop with dummy echos and
some dummy echos after the loop.
The core problem is that the script stops processing (different from 7.x.y).
------------------------------------------------------------------------
[2020-07-08 16:46:56] cmb@php.net
> The call is probably throwing a TypeError, but something in your
> error/exception handling setting eats it.
That's quite likely. However, to exclude any potential OPcache
issues, please run the script with OPcache disabled.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=79811
--
Edit this bug report at https://bugs.php.net/bug.php?id=79811&edit=1