From: [EMAIL PROTECTED] Operating system: Solaris 2.8 PHP version: 4.1.1 PHP Bug Type: PostgreSQL related Bug description: pg_connect failing on iPlanet 4.1 nsapi
Revisiting bug #15282, I am unable to connect to a remote PostgreSQL database using server parsed php. I can connect when the script is run: a). On the command line b). As a CGI binary c.) Using a perl script d.) Using psql Postmaster on the remote server IS running with the '-i' option, even though the error message in the web server logs reads: [29/Jan/2002:22:50:18] info (14848): for host b-39-117-res1.mts.net trying to POST /members.php, PHP_log_message reports: PHP Warning: Unable to connect to PostgreSQL server: connectDBStart() -- connect() failed: No such file or directory Is the postmaster running (with -i) at 'db1' and accepting connections on TCP/IP port 5432? in /usr/local/etc/httpd/htdocs/cardp.ca/members.php on line 100 No other errors appear and the server keeps on running. The results of running snoop on the interfaces reveals that instead of the expected SYN/ACK, the system initiating the connection sends SYN/RST. The connection fails identically when using either pg_connect or pg_pconnect. Php configuration is as shown below, taken from the original report. As well, the contents of the script are included. After the bug had been closed as bogus, I asked [EMAIL PROTECTED] if he could be more specific in his diagnosis that this behaviour is expected and in the manual. His only reply was that postgres needs to be run using the -i option, which I have already stated is the case. If it weren't, none of the other connections would suceed either. Connections from the sames server to the same remote database using mysql as the database do not fail. Niether does running the script using apache as the web server. Unfortunately, these are not valid options in our production environment. Any insight would be greatly appreciated. - Dave Ruppel >From bug #15282: [29 Jan 1:56pm] [EMAIL PROTECTED] When attempting to connecting to a remote database using pg_connect(host=dbhost user=dbuser dbname=dbname), the operation fails. I can connect using psql from the command line or through a perl script as any user. Running php as a CGI binary also works. However, when running as an nsapi, the connection fails. A quick look using snoop shows that the failed connection appears to be sending SYN/RST instead of SYN/ACK (which is what is seen during a successful connection). Here's my system details: OS: Solaris 2.8 Web Server: iPlanet 4.1 PHP version: php 4.1.1 PHP configure options: ./configure --with-nsapi=/usr/local/iws41 \ --with-pgsql=/usr/local/pgsql \ --enable-libgcc PostgreSQL version: 7.0.3 For what it's worth, connections to a mysql database between the same systems works without a hitch. Any suggestions would be appreciated. [29 Jan 8:42pm] [EMAIL PROTECTED] Could you take a look at web server error log? Do you have anything related? (segfault, etc) Could you run iPlanet under gdb? (to see if it is exting or segfaulting) Do you quote connection string? Do you get any error message from pg_connect? Do you have multiple libpq? (find / -name "libpq*") Do you have the same problem with snapshot? http://snaps.php.net/ Attach *complete* script even if it is a few lines next time. [30 Jan 12:11am] [EMAIL PROTECTED] I've also tried using the current CVS (01/26/2002) with no luck. The are no multiple copies of libpq, it's a new system. I haven't tried running iPlanet under gdb yet, that'll be something to try tommorow. In the mean time, here's the error from the logs: [29/Jan/2002:22:50:18] info (14848): for host b-39-117-res1.mts.net trying to POST /members.php, PHP_log_message reports: PHP Warning: Unable to connect to PostgreSQL server: connectDBStart() -- connect() failed: No such file or directory Is the postmaster running (with -i) at 'db1' and accepting connections on TCP/IP port 5432? in /usr/local/etc/httpd/htdocs/cardp.ca/members.php on line 100 No other errors appear and the server keeps on running. The source of the script (sans-HTML) calling the database follows: <? $db = pg_connect("host='db1' user='cardp' dbname='cardp'"); if(!$db) { echo "\nAn error occured connecting to the database.\n"; exit; } if($alpha=="Show All") { $query = "SELECT last_name, first_name, address1, address2, address3, city, province, country, postal_code, email FROM members WHERE active = TRUE ORDER BY last_name"; } else { $query = "SELECT last_name, first_name, address1, address2, address3, city, province, country, postal_code, email FROM members WHERE active = TRUE AND last_name LIKE '$alpha%' ORDER BY last_name"; } $result = pg_exec($db, $query); if(!$result) { echo "An error occured executing the query.\n"; exit; } $numFields = pg_numfields($result); $numRows = pg_numrows($result); if($numRows > 0) { for ($rowCount=0; $rowCount < $numRows; $rowCount++) { $row = pg_fetch_array($result, $rowCount); if($rowCount % 2) { print("<tr>\n"); } else { print("<tr class=\"shade\">\n"); } print("<td align=left valign=top width=200>"); print("<B>" . $row["last_name"] . ", " . $row["first_name"] . "</B></td>\n"); print("<td align=left valign=top width=200>"); if($row["address1"]) { print($row["address1"] . "<br>\n"); } if($row["address2"]) { print($row["address2"] . "<br>\n"); } if($row["address3"]) { print($row["address3"] . "<br>\n"); } print($row["city"] . ", " . $row["province"]); if($row["postal_code"]) { print(" " . $row["postal_code"] . "<br>\n"); } if($row["country"] != "Canada") { print($row["country"] . "<br>\n"); } if($row["email"]) { print("<a href=\"mailto:" . $row["email"] . "\">" . $row["email"] . "</a>\n"); } print("</td>\n</tr>\n"); } if(!($numRows % 2)) { print("<tr><td colspan=2 class=\"shade\"> </td></tr>\n"); } } else { print("<tr><td align=center valign=middle colspan=2>\n"); print("<h2>Sorry</h2>\n"); print("<B>There were no results that matched your query.</B>\n"); print("<P>Please make another selection.</P>\n"); print("</td></tr>\n"); } ?> - DR [30 Jan 1:24am] [EMAIL PROTECTED] This is not a bug but usual result with your configuration. Read manual. It's explained :) [30 Jan 6:02pm] [EMAIL PROTECTED] It's in the manual? Could you please be a little more specific? I've gone through the manual and cannot find anything regarding these results from this configuration. I've managed to get this to work on a linux system using the same configuration without encountering the same problem. However, this is not an option within our current production environment. -- Edit bug report at: http://bugs.php.net/?id=15323&edit=1 -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]