go to bug id or search bugs for
I have a problem concerning COM support in PHP 7.
I have been using COM called from PHP applications for a very long time.
After calling new COM(... , I used to call methods with several in/out parameters.
The result is used just to check status of the call but data is extracted from in/out parameters.
Everything has worked just fine in different PHP versions for almost a decade till I tried PHP 7.
I am able to call methods and can access results without problems, but in/out parameters stay the same after the call.
I carried out tests on the same machine with PHP 5.6 and everything worked OK.
When I switched to PHP 7 or beta PHP 7.1, output parameters were unaffected only result was correctly filled out.
(It did not matter whether I used 32-bit or 64-bit versions).
I used Windows Server 2008 R2 Standard for testing.
Binaries for PHP from http://windows.php.net/download/ and http://windows.php.net/qa/ (PHP 7.0.10 - VC14 x86 Thread Safe, VC14 x64 Thread Safe and PHP 7.1.0 beta2)
For Apache from https://www.apachelounge.com/download/ (Apache 2.4.23 Win64, Apache 2.4.23 Win32)
with appropriate,latest C++ Redistributables installed
I combined 32-bit versions of COM, Apache, PHP and then 64-bit versions with the same result.
$comTest = new COM("comTest.comTestIF") or die("Unable to instantiate comTest");
$result = $comTest->test($parIn,$parOut1,$parOut2);
// after the call $parOut1,$parOut2 parameters are unaffected although they are changed inside com. Only result is correct
Add a Patch
Add a Pull Request
Thanks for the report. Please post the test class, or better a test project, along with the way you register the class and other setup. Also need the current/expected output to compare.
Hello, thanks for responding so quickly.
comTest.dll is created in Embarcadero® Delphi 10 Seattle Version 23.0.21418.4207
(I have used COM objects created even in older versions of Delphi for almost a decade and it worked fine).
comTest.dll was created just for testing purposes. I tested this exact version today with php 5.6 on the same server and it worked OK.
Then with proper VC14 Win32 version of Apache and VC14 x86 PHP 7.0.10 and it returns correct result, but in/out parameters keep input values instead of values provided inside COM.
I will send you an e-mail with the Delphi project (contains dlls - both Wind32 and Win64 versions) and description of both php and apache setups(I do not know how to enclose it here).
The php test script and outputs for both versions will be enclosed. Both setups use 32-bit versions but results for 64-bit versions are the same.
Method in COM object:
function TcomTestIF.test(const Param1: WideString; var Param2, Param3: WideString): WideString;
var res : string;
res := 'Param1=' + Param1 + '; Param2=' + Param2 + '; Param3=' + Param3;
Param2 := 'Output text Param2';
Param3 := 'Output text Param3';
Result := res;
Automatic comment on behalf of ab
Log: Fixed bug #72922 COM called from PHP does not return out parameters
In 7.0.11 has stopped working COM, which worked well in 7.0.10. The 500 error.
I searched the line with the error. That's the line began to give an error on 7.0.11:
This method should return a value.
@a at kornienko dot ru, please check the latest snapshots. If you still experience the issue, please create a separate ticket and include the reproduce code.