Ich habe versucht, die folgenden Beispiele wie:Unterstützt PHP Prozesssubstitution?
$ php -r 'require_once($argv[1]);' <(echo "hello")
oder:
$ php -r 'file_get_contents($argv[1]);' <(echo "hello")
beide nicht wie:
PHP Warning: require_once(/dev/fd/63): failed to open stream: No such file or directory in Command line code on line 1
PHP Warning: file_get_contents(/dev/fd/63): failed to open stream: No such file or directory in Command line code on line 1
oder:
$ php -r 'file_get_contents($argv[0]);' < <(echo "hello")
, die versagt w ith:
PHP Fatal error: require_once(): Failed opening required '-' (include_path='.:/usr/share/pear:/usr/share/php') in Command line code on line 1
Die obigen Versuche wurden von drush
Befehl inspiriert, zum Beispiel:
$ drush --early=<(echo print 123';') ""
[warning] require_once(/dev/fd/63): failed to open stream: No such file or directory preflight.inc:58
wo ich den dynamischen PHP-Code aus dem Dateideskriptor (ohne die Schaffung eine separate Datei jedes Mal) injizieren könnte in Um den Code vor dem Bootstrapping des Hauptcodes auszuführen.
Andere ähnliche Befehle Tools ordnungsgemäß funktionieren:
$ cat <(echo "hello")
hello
oder:
$ python -c "import sys; print sys.stdin.readlines()" < <(echo "hello")
['hello\n']
Ich habe das gefunden PHP bug und this one, aber diese vor langer Zeit festgelegt wurde und ich m mit 5.6.22.
Gibt es eine Möglichkeit, dass ich PHP in das Lesen von Daten aus der Prozesssubstitution (zum Lesen von Dateideskriptor, z. B. /dev/fd
) beim Aufruf von CLI, mit einem einfachen One-Liner?
'$ argv [1]' kehrt Dateideskriptor ('/ dev/fd/63'), so ist das richtig, aber ich weiß nicht, warum es es nicht lesen kann. Ihr letztes Beispiel verwendet _command substitution_, nicht _process substitution_. Ich bin also eher daran interessiert, das Beispiel mit _process substitution_ zu sehen. – kenorb
@kenorb Die Sache ist, dass die Prozesssubstitution hier einen Dateideskriptor liefert, von dem es die Zeichenkette "a" liest. Sie können den Inhalt eines Dateideskriptors nicht vorbestimmen, damit er die gewünschten Daten enthält. Was genau möchten Sie tun? Geben Sie einen variablen Dateinamen ein? – fedorqui
Ich spielte mit Drush: 'drush --early = <(echo print 123)" "' was mir 'require_once (/ dev/fd/63)' Fehler gab, also fragte ich mich, ob es alternative Syntax gibt, die ich verwenden könnte , weil das Verwenden der Befehlsersetzung in diesem Fall nicht funktioniert. Es könnte eine Sache für eine andere Frage sein, aber auf der anderen Seite wäre das zu ähnlich. Grundsätzlich ist es nicht speziell zu drush, aber ich wollte herausfinden, ob PHP Dateibeschreibungen unterstützen kann, ob es ein Fehler oder ein Design ist. – kenorb