2016-12-23 1 views
0

Ich erzeuge einen Hash in meiner Perl-Datei und wenn ich die Skript-Formular-Konsole ausführen, ist alles in Ordnung. Wenn ich das gleiche Skript über PHP laufen lasse, scheint mein Hash leer zu sein.PHP exec erkennt nicht PHP-Hash

In PHP:

exec("perl perl/test.pl", $output); 
print_r($output); 

In meiner Perl-Datei:

#!/usr/bin/perl 

use strict; 
use warnings; 
use Data::Dumper; 

my $filename = 'test.txt'; 
open(my $fh, '<:encoding(UTF-8)', $filename); 

my %tc; 

while (my $row = <$fh>) { 
    chomp $row; 

    if ($row =~ /someregex/) { 
     $tc{$1} = $2; 
    } 

} 

my $size = keys %tc; 
print $size; 

print Dumper(\%tc); 

Wenn ich es in der Konsole laufen hat es eine Größe von 1 mit diesem Code Stück und der dumper zeigt den richtigen Inhalt. Wenn ich es in PHP ausdrucke, hat es eine Größe von 0 und gibt ein leeres Array zurück.

Die PHP führt das Perl-Skript aus, als würde ich nur ein paar einfache Daten zurückgeben, die PHP zeigt es.

Ich würde jede helfende Antwort schätzen. Vielen Dank!

+1

Versuch ändern Sie den vollständigen Pfad zu 'perl/test.pl' –

+0

Angabe tat du versuchst 'shell_exec' anstelle von' exec' zu verwenden? – Fky

+1

Versuchen Sie, beim Ausführen des Skripts einen absoluten Pfad zu verwenden, und stellen Sie sicher, dass der Benutzer, über den das System PHP ausführt, über die richtigen Dateiberechtigungen verfügt. –

Antwort

0

Um den relativen Pfad des Skripts dir anstatt der aktuellen Arbeitsverzeichnis zu beheben,

my $filename = 'test.txt'; 

zu

use FindBin qw($RealBin); 

my $filename = "$RealBin/test.txt";