Doc #80230 [Ver->Csd]: Doc for exec specifies & (reference) param, fails
Edit report at https://bugs.php.net/bug.php?id=80230&edit=1
ID: 80230
Updated by: phpdocbot@php.net
Reported by: per at perit dot se
Summary: Doc for exec specifies & (reference) param, fails
-Status: Verified
+Status: Closed
Type: Documentation Problem
Package: Documentation problem
Operating System: Linux
PHP Version: Irrelevant
Block user comment: N
Private report: N
New Comment:
Automatic comment on behalf of cmb
Revision: http://git.php.net/?p=doc/en.git;a=commit;h=d54819610d84aa50a3223b99c9946d58cc489b3a
Log: Fix #80230: Doc for exec specifies & (reference) param, fails
Previous Comments:
------------------------------------------------------------------------
[2020-12-09 15:46:51] cmb@php.net
Automatic comment from SVN on behalf of cmb
Revision: http://svn.php.net/viewvc/?view=revision&revision=351975
Log: Fix #80230: Doc for exec specifies & (reference) param, fails
------------------------------------------------------------------------
[2020-10-13 20:28:42] cmb@php.net
What Rowan said. And yes, there should be an example.
Note that there is also an appendix on "How to read a function
definition (prototype)"[1]
> "(PHP 4, PHP 5, PHP 7)"
That just means that function is available for PHP 4, 5 and 7; it
does not imply that it worked exactly the same in older versions.
In fact, the manual currently is supposed to document only PHP 7
(there is few info about PHP 8, and still some info about PHP 5,
though).
[1] <https://www.php.net/manual/en/about.prototypes.php>
------------------------------------------------------------------------
[2020-10-13 20:04:52] rowan dot collins at gmail dot com
The documentation is showing you the *signature* of the function, not the *usage*. An actual
declaration in userland would in fact look something like this:
function exec (string $command, ?array &$output=null, ?int &$return_var=null): string { ....
}
The manual page could do with an example of using those params though, which would look something
like this:
$output=null;
$retval=null;
exec('whoami', $output, $retval);
echo "Returned with status $retval and output $output";
------------------------------------------------------------------------
[2020-10-13 19:45:20] per at perit dot se
Description:
------------
---
From manual page: https://php.net/function.exec
---
The documentation specifies syntax
exec ( string $command [, array &$output [, int &$return_var ]] ) : string
This syntax breaks PHP, and according to numerous internet articles like https://stackoverflow.com/questions/8971261/php-5-4-call-time-pass-by-reference-easy-fix-available
explaining it has been so a while:
> As of PHP 5.3.0, you will get a warning saying that "call-time pass-by-reference" is
> deprecated when you use & in foo(&$a);.
Please update the documentation with correct syntax, and if/when it differs for specific versions,
please note the version and change in question - now it incorrectly claims to be valid for
"(PHP 4, PHP 5, PHP 7)"
Test script:
---------------
$ cat > test-ref-arg.php
<?php
exec ( "pwd", &$output );
echo "Got output: ";
var_dump($output);
$ php test-ref-arg.php
PHP Fatal error: Call-time pass-by-reference has been removed in /home/xx/IMPORT/test-ref-arg on
line 2
/opt/rh/rh-php73/root/bin/php test-ref-arg.php
PHP Parse error: syntax error, unexpected '&', expecting ')' in
/home/xx/test-ref-arg.php on line 2
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=80230&edit=1
Thread (5 messages)