php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #32774 stdin handling confusion in COPY
Submitted: 2005-04-20 00:13 UTC Modified: 2005-06-27 08:43 UTC
Votes:1
Avg. Score:3.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: volkan dot yazici at gmail dot com Assigned:
Status: Wont fix Package: PostgreSQL related
PHP Version: 5.0.3 OS: Linux 2.6.11
Private report: No CVE-ID: None
 [2005-04-20 00:13 UTC] volkan dot yazici at gmail dot com
Description:
------------
There seems to be a confusion in handling stdin between PostgreSQL and PHP.

Reproduce code:
---------------
<?php
$conn = pg_connect("user=knt dbname=template1")
        or die("Connection failed!\n");

print "Starting query...\n";
$res = pg_query("COPY example_table FROM stdin");

/*
 * If I'd not use a pg_end_copy() call just after "COPY FROM
 * stdin" query, script flow will never pass through this
 * line and stuck here with a 100% CPU usage.
 */

if ( pg_result_status($res) != PGSQL_COPY_IN )
    die("Unexpected result status!\n");

print "At last!\n";
pg_close();
?>

/*
 * The same of this script
 * [http://yazicivo.fateback.com/example-copy.txt] written
 * in C (with same libpq calls) works fine.
 */

Expected result:
----------------
shell$ php example-copy.php
Starting query...
At last!
shell$ _

Actual result:
--------------
shell$ php example-copy.php
Starting query...

# It enters to an endless loop with a 100% CPU usage.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2005-06-26 19:18 UTC] sniper@php.net
Please try using this CVS snapshot:

  http://snaps.php.net/php5-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5-win32-latest.zip


 [2005-06-27 08:22 UTC] joey@php.net
I don't think there's any way to fix this with the current
structure of PHP. There's no construct to pass control of
php://stdin to the pg library.
 [2005-06-27 08:43 UTC] joey@php.net
To clarify:

If you're expecting PHP to watch php://stdin for data,
detect lines, call pg_put_line(), and detect "\n\.\n" and
call pg_end_copy(), I think it's safe to classify this as
"Won't Fix".

If you're simply wondering why PHP is hanging on the small
script given below, it's because you didn't pg_end_copy().
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Dec 22 06:01:30 2024 UTC