[PHP/Linux & PIPES]

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
Weet iemand een betrouwbare manier om de maximum grootte van een pipe te bepalen?

Het onderstaande stuk code, functioneert niet meer op een Debian machine, wanneer er op de stdin meer als 750.000 bytes gezet worden. (Dit stuk code is schaamteloos van de php.net site gekopieerd en komt niet 100% overeen met mijn eigen code, het probleem is echter hetzelfde, om te voorkomen dat we over Coding Styles gaan discussieren heb ik het voorbeeld van de php.net site afgeplukt) In de situatie hier, is er een executer klasse die regelt dat de uitvoer van een commando buiten php, netjes in een php variabele gestopt wordt.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$descriptorspec = array(
   0 => array("pipe", "r"),
   1 => array("pipe", "w"),
   2 => array("file", "/tmp/error-output.txt", "a")
);

$process = proc_open("cat", $descriptorspec, $pipes);

if (is_resource($process)) {
 
   fwrite($pipes[0], $in);
   /* fwrite writes to stdin, 'cat' will immediately write the data from stdin
   * to stdout and blocks, when the stdout buffer is full. Then it will not
   * continue reading from stdin and php will block here.
   */

   fclose($pipes[0]);

   while (!feof($pipes[1])) {
       $out .= fgets($pipes[1], 1024);
   }
   fclose($pipes[1]);

   $return_value = proc_close($process);
}
?>


Wanneer ik http://nl2.php.net/manual/en/function.proc-open.php#38870 lees, wordt hetzelfde probleem omschreven echter bij mij, is mijn max pipe size niet 10kb maar ergens rond de 700kb

Het probleem voorkom ik nu, door de stdin minder lange input te sturen, dit zou ik graag anders opgelost zien. Namelijk de functie, die de proc_open tot en met proc_close uitvoert, moet zelf regelen dat er niet teveel data per keer op de stdin geplaatst wordt en er optijd uitgelezen wordt.

Ik ben nu een beetje aan het rondzoeken op google, maar het is bijna onmogelijk om iets te informatie te vinden over een MAX PIPE SIZE, daarnaast zou ik ook niet goed weten waar ik anders op kan zoeken, hopelijk kunnen jullie me hier een duwtje in de goede richting geven.

Deze blocking kom ik alleen maar tegen in PHP, dus verwacht ik dat er ergens in de PHP-broncode dit MAXIMUM gedefinieerd wordt, aangezien je onder linux makkelijk enkele honderden megabytes via pipes kan door geven.

[ Voor 17% gewijzigd door 0528973 op 16-08-2005 15:20 ]

Pascal


Acties:
  • 0 Henk 'm!

  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
Niemand heeft enig idee?

Pascal