Re: PHP4 for Windows2000 and MS SQL Server 7 (some tests and possible bugs)
| From: | Rasmus Lerdorf | Date: | Sat, 24 Jun 2000 22:59:29 +0000 |
| Subject: | Re: PHP4 for Windows2000 and MS SQL Server 7 (some tests and possible bugs) | ||
| References: | 1 | Groups: | php.db php.dev php.windows |
| Request: | Send a blank email to php-dev+get-22243@lists.php.net to get a copy of this message | ||
The whole point of splitting the mailing lists into specific topics is
lost if you crosspost to a bunch of them and it only serves to annoy
people like myself who are on all the lists.
On Sat, 24 Jun 2000, Andre Couto wrote:
>
> Hi!
>
> I've make some tests and I think that there are some bugs mainly at
> the ISAPI version of php for Windows.
>
> I'm using Windows 2000 Server with Microsoft SQL Server 7 and with
> Oracle 8. Also IIS 5 and PHP4.
>
> So, I was looking for support on Windows and I discover that the
> PHP Group don't support Win32 binaries (only a few of them) and that I
> have two options:
>
> 1- Compile the extensions with VC5 or VC6
> 2- Take the binaries from swwwing.com
>
> Well. I don't have VC5 or VC6. So I am trying to use swwwing.com
> binaries. (Thanks to Frank for the support)
>
> How is my installation:
> At the moment: I have downloaded the core files (php.exe, php4isapi.dll,
> php4nts.dll, php4ts.dll, phpts.exe) and all the modules of version 4
> from swwwing.com
>
> I have renamed php.ini-dist to php.ini. I didn't make any changes at this
> file. And I have copied all the core files and the modules to
> c:\winnt\system32.
>
> First Test
> ----------
>
> I've tried to use the ISAPI DLL. It works fine if I didn't include any
> extension DLL to it. (Well, I only test the extensions php_mssql70.dll and
> php_oci8.dll). So I have configured the IIS to execute php4isapi.dll and
> I have changed the php.ini to load the extension=php_mssql70.dll
>
> I have also written a little test code:
>
> ----------------------------------------------------------------
> <?php
>
> //dl ("php_mssql70.dll");
>
> $dbconn=mssql_connect("STRANGER","db_user","teste");
> if (!$dbconn) die("error1");
> var_dump($dbconn);
> echo "<BR>";
>
> $ret=mssql_select_db("generauction",$dbconn);
> if (!$ret) die ("error2");
> var_dump($ret);
> echo "<BR>";
> //exit
>
> $cursor=mssql_query("SELECT * FROM status",$dbconn);
> var_dump($cursor);
> echo "<BR>";
> if (!$cursor) die ("error3");
> //exit
>
> $array=mssql_fetch_row($cursor);
> var_dump($array);
> echo "<BR>";
> echo $array[0]."-".$array[1];
> mssql_close($dbconn);
> ?>
> -----------------------------------------------------------------
>
> Note that at this test I'm loading mssql extension at the php.ini and
> that the dl line is commented.
>
> Another important informations is the status table:
>
> STATUS
>
> Field Data Type
> -------- ----------
> stacod tinyint
> stades varchar(20)
>
> What is the result of the code???? (at the browser)
>
> First Time:
> resource(1) of type 2
> bool(true)
> resource(2) of type 1
> array(2) { [0]=> string(1) "1" [1]=> string(5) "teste" }
> 1-teste
>
> After Reload:
> resource(1) of type 2
> bool(true)
> PHP has encountered an Access Violation at 00000000
>
> After Another Reload:
> resource(1) of type 2
> bool(true)
> resource(2) of type 1
> array(2) { [0]=> string(1) "1" [1]=> string(5) "teste" }
> 1-teste
>
> After another:
> resource(1) of type 2
> bool(true)
> PHP has encountered an Access Violation at 00000000
>
> ... I did that really a lot!! And it always like that. One time it works
> and the next time doesn't work. So, the error is NOT randomic.
>
> And if you pay attention you can see another error. The Field stacod in table
> STATUS is tinyint. It's not a string. And for the PHP it is a STRING.
>
>
> SECOND TEST:
> ------------
> The only change from the first test is that I have uncommented the first line
> with "exit". So now the code only executes the mssql_connect() and the
> mssql_select_db() functions. The query function is OUT.
>
> What is the result???
>
> resource(1) of type 2
> bool(true)
>
> It's always that. So, no errors here.
>
>
> THIRD TEST:
> -----------
> I have used the same code. And I have commented the "exit" line again. The only
> change now was in the SELECT clause at the query function. Instead of use the
> status table I've used the client table. The difference is that the client table
> was completely EMPTY.
>
> What is the result???
>
> resource(1) of type 2
> bool(true)
> resource(2) of type 1
> bool(false)
> -
>
> And It's always like that. No errors here again!
>
> I did that test with other tables. And the results was always like that. If a table
> has data. The Access Violation occurs, if it is empty, no errors!
>
>
> 4TH TEST:
> ------------
> Instead of loading the php_mssql70.dll from the php.ini file. I started to load it
> from the code. So I have uncommented the line dl (php_mssql70.dll) from the code.
>
> The test is again with the status table.
>
> What is the result?
>
> First Time:
>
> resource(1) of type 16
> bool(true)
> resource(2) of type 15
> array(2) { [0]=> int(1) [1]=> string(5) "teste" }
> 1-teste
>
> After the reload:
>
> resource(1) of type 19
> bool(true)
> resource(2) of type 18
> array(2) { [0]=> int(1) [1]=> string(5) "teste" }
> 1-teste
>
> Anther:
>
> resource(1) of type 22
> bool(true)
> resource(2) of type 21
> array(2) { [0]=> string(1) "1" [1]=> string(5) "teste" }
> 1-teste
>
> Another:
>
> resource(1) of type 25
> bool(true)
> resource(2) of type 24
> array(2) { [0]=> int(1) [1]=> string(5) "teste" }
> 1-teste
>
> Another:
>
> resource(1) of type 28
> bool(true)
> resource(2) of type 27
> array(2) { [0]=> int(1) [1]=> string(5) "teste" }
> 1-teste
>
> Another:
>
> resource(1) of type 31
> bool(true)
> resource(2) of type 30
> array(2) { [0]=> string(1) "1" [1]=> string(5) "teste" }
> 1-teste
>
> ...And after a lot of reloads:
>
> resource(1) of type 2116
> bool(true)
> resource(2) of type 2115
> array(2) { [0]=> string(1) "1" [1]=> string(5) "teste" }
> 1-teste
>
> ...I stopped here.
>
> Two VERY STRANGES things is happening here. The first of them is that the php
> seems to be alocating a lot of resources. At the others teste this was not
> ocurring.
>
> And the other error is that sometimes the stacod fiels is integer and the others
> is string!!!! Why????!!!
>
> 5TH TEST:
> -----------
>
> Now I have stopped to use the ISAPI DLL and started to use the phpts.exe the CGI
> version from swwwing.com.
>
> One note about that: I have to put the php.ini file in c:\winnt directory. The
> others core files and modules was in c:\winnt\system32 and the ISAPI DLL have
> read the php.ini file in the same directory but the phpts.exe only found it on
> c:\winnt.
>
> Well, after this little problem...
>
> I have configured the php.ini to load the extension php_mssql70.dll. And I have
> commented the line dl(php_mssql70.dll) in my code. And also configured the IIS to
> execute the phpts.exe
>
> What was the result???
>
> resource(1) of type 2
> bool(true)
> resource(2) of type 1
> array(2) { [0]=> string(1) "1" [1]=> string(5) "teste" }
> 1-teste
>
> And it was always like that. Is was similar with the first test but now with no
> Access Violation anymore.
>
> But the error with the data type of the field stacod is happening again...
> The stacod is not a string.
>
> 6TH TEST:
> ---------
>
> At this step I stoped to load the mssql extension from the php.ini file and started
> to load it from my code with the line dl(php_mssql70.dll). That's the only change.
>
> What was the result:
>
> resource(1) of type 16
> bool(true)
> resource(2) of type 15
> array(2) { [0]=> int(1) [1]=> string(5) "teste" }
> 1-teste
>
> And it was always like that after the reloads...
>
> With this configuration, at this test, no errors were found.
>
> ----------------------------
>
> Conclusion:
>
> The best configuration appears to be currently to load the php CGI version (phpts.exe
> from swwwing.com) and to load the extension at the code instead of using php.ini.
>
> ----------------------------
>
> And the others configurations? What is happening? I don't know. But is appearing to bee
> bugs.
>
>
>
>