Back to Blog
PHP Troubleshooting

FIX: Installing PEAR packages with PHP 7.2

This article will cover the solution to the PEAR "Cannot use result of built-in function in write context" issue.

The Issue

If installing a pear package (for instance PHP Code Sniffer), when running:
pear install PHP_CodeSniffer
This error is shown
PHP Fatal error: Cannot use result of built-in function in write context in ...\php\pear\Archive\Tar.php on line 639
Fatal error: Cannot use result of built-in function in write context in ...\pear\Archive\Tar.php on line 639
This error is shown because the function is called by reference. More details about this issue can be found in this Pull Request.  

The solution

You might be tempted to execute the following
pear install Archive_Tar
which will result in the same error.   Go to the line indicated in the error (639 in this case) and replace:
 $v_att_list = & func_get_args();
with
 $v_att_list = func_get_args();
The above means the func_get_args() isn't called by reference anymore.

Our recommendation

The above does fix the problem, but we recommend installing the Archive_Tar again so you have the latest working version.   Run the following command:
pear install Archive_Tar
This will update your Archive Tar PEAR package.   And to install the code sniffer run:
pear install PHP_CodeSniffer
 

Frequently Asked Questions

What error occurs when installing PEAR packages with PHP 7.2? +

Running a command like pear install PHP_CodeSniffer produces the fatal error "Cannot use result of built-in function in write context" in Archive/Tar.php on line 639, because the function is called by reference.

How do you fix the "Cannot use result of built-in function in write context" error? +

Go to the line indicated in the error (line 639) and replace "$v_att_list = &func_get_args();" with "$v_att_list = func_get_args();", so func_get_args() is no longer called by reference.

Does running pear install Archive_Tar directly fix the problem? +

No, running pear install Archive_Tar on its own results in the same error, since the underlying Archive_Tar.php file still has the by-reference function call.

What is the recommended full fix sequence? +

After manually fixing the func_get_args() line, it's recommended to run pear install Archive_Tar again to get the latest working version of the package, and then run pear install PHP_CodeSniffer to install the code sniffer.