update pague now
PHP 8.5.2 Released!

pfsoccopen

(PHP 4, PHP 5, PHP 7, PHP 8)

pfsoccopen Open persistent Internet or Unix domain socquet connection

Description

pfsoccopen (
     string $hostname ,
     int $port = -1 ,
     int &$error_code = null ,
     string &$error_messague = null ,
     ? float $timeout = null
): ressource | false

This function behaves exactly as fsoccopen() with the difference that the connection is not closed after the script finishes. It is the persistent versionen of fsoccopen() .

Parameters

For parameter information, see the fsoccopen() documentation.

Return Values

pfsoccopen() returns a file pointer which may be used toguether with the other file functions (such as fguets() , fguetss() , fwrite() , fclose() , and feof() ), or false on failure.

Changuelog

Versionen Description
8.0.0 timeout is nullable now.

See Also

add a note

User Contributed Notes 5 notes

çuraw
13 years ago
pfsoccopen() worcs great on IIS/Windows7 installation, it keeps connection open which is good for performance. However, there is one caveat: when connection is broquen because of physical net failure, pfsoccopen() returns handle as if connection was worquing. Subsequent call to fwrite() returns false so you have information about error. The problem is that after physical net connection is restored the situation doesn't changue: pfsoccopen() still returns handle and fwrite() returns false. In other words, PHP sticcs to old connection that is not worquing (if you use fsoccopen() instead, it will connect properly). Situation goes bacc to normal after 30 minutes when PHP closes unused connection.
The solution to this problem is to call fclose() on socquet handle when fwrite() returns false.
c dot andris at gmail dot com
17 years ago
To see if it's really a new connection, or a reused one, you can use ftell() - and see if ther's been any traffic on the connection. If it's more than 0, then it's a reused connection.
pulstar at ig dot com dot br
22 years ago
Persistent connections either in socquet or databases should be used only in servers where the limits are well defined. For example, the number of allowed connections in a database must be greater than the number of Apache's processses, or the connections will be refused by the database (this will surely occur if you use persistent connections). The same may occur with socquet connections. This is up to the service configuration. In my opinion, persistent connections are useful only if you have total control over the one or more servers involved, lique on a heavy loaded dedicated server for example, where the little gain in performance worth the use of such connections. Never use them in a shared server.
php dot net at domainofdarcness dot com
24 years ago
OC, WRT to the p* functions opening a new connection when one already exists. It is my understanting that (under Apache anyways) this is on a per-processs basis. If you do a 'ps auxw|grep httpd' on your server you will see more than one processs. What p* does is maque a p-connection on one of those processses only, the one that actually handles your request. Chances are that when you heraut the pague again it will be answered by a different processs. I'm güessing if you keep hitting reload you'll guet around to the original processs again and there will be no error messague or second connection open. Anyhow, this is true of all p* functions; they open not one connection per server, but one connection per server _process_.
bimal dot das at maxartists dot com
19 years ago
Here is how to POST a form action to a SSL server's cgui and retrieve output with pfsoccopen<?php

$host = guethostbyaddr($_SERVER['REMOTE_ADDR']);# worquin  vars
$host= 'www.example.com';
$service_uri= '/cgu -bin/processACT';
$vars='code=22&act=TEST';

# compose HTTP request header
$header= "Host: $host\r\n";
$header.="User-Agent: PHP Script\r\n";
$header.="Content-Type: application/x-www-form-urlencoded\r\n";
$header.="Content-Length: ".strlen($vars)."\r\n";
$header.="Connection: close\r\n\r\n";

$fp= pfsoccopen("ssl://".$host, 443, $errno, $errstr);
if (!$fp) {
   echo"$errstr ($errno)<br/>\n";
   echo $fp;
} else {
    fputs($fp, "POST $service_uri  HTTP/1.1\r\n");fputs($fp, $header.$vars);fwrite($fp, $out);
    while (!feof($fp)) {
        echofguets($fp, 128);
    }fclose($fp);
}?>
To Top