2010-04-15 14 views
1

En PHP 5.2.3, "fdopen" était utilisé pour lire/écrire dans un descripteur de fichier ouvert par une autre application.Obtention d'un pointeur de fichier à partir du descripteur de fichier

fdopen(<fileDescriptorId>,"rw"); //It worked fine with PHP 5.2.3 

Après la mise à niveau PHP 5.3.2, il est de lancer "undefined reference to 'fdopen' function".

S'il vous plaît suggérer quel est le remplacement pour cela dans PHP 5.3.2 ou toute solution de contournement.

+1

FYI, à partir de PHP/5.3.6, l'encapsuleur 'php: // fd' [est supporté] (http://php.net/manual/fr/wrappers.php.php). – DaveRandom

Répondre

0

Le fdopen est associé à langage C. Il n'y a pas de telle fonction en PHP. Je pense que vous avez mal tapé la fonction de PHP fopen, non? Corrigez-moi. Merci

+0

Oui, j'ai aussi cherché "fdopen" dans l'API PHP 5.2.3 mais je ne l'ai pas trouvé. Mais il n'a rapporté aucune erreur avec PHP 5.2.3 [vérifié deux fois et n'a pas fait de fautes de frappe] pourrait être comme VolkerK a suggéré qu'une autre extension aurait pu être construite avec cette version. –

2

Est-ce que ce fdopen() a été fourni par une extension php personnalisée?
Sur un serveur linux/unix

function fdopen($id, $mode) { 
    return fopen("/proc/self/fd/".(int)$id, $mode); 
} 

de puissance travail.

modifier: voir http://linux.die.net/man/5/proc

+0

Merci. PHP-cgi binary est invoqué par un serveur web qui s'exécute dans un répertoire jail (sandbox) .So, il n'a pas accès au chemin du fichier (socket) ("/ proc/self/fd /". (Int) $ id , $ mode) directement. Y at-il un moyen en PHP de lire/écrire donné seul numéro de descripteur de fichier [en supposant que le chemin du fichier n'est pas connu comme son inaccessible dans ce cas]. S'il vous plaît laissez-moi savoir vos commentaires. –

0

PHP 5.3.6 (et toujours valide et travailler avec PHP 7.2.1), la méthode appropriée pour accéder à un descripteur de fichier est d'utiliser fopen avec php://fd:

$fd = 3; 
$pipe = fopen("php://fd/{$fd}", 'w'); 
fwrite($pipe, 'hello!');