0

我有一个 perl 脚本,它将输入作为文件并以文本文件的形式返回结果。我想使用文件作为输入,由用户通过 php 页面上传。为此我该怎么办?我有 PHP 5.3.14 和 ActivePerl 5.14.x。

4

2 回答 2

0

在 PHP 中,当一个文件被上传时,它首先被放置在一个临时位置。您可以使用以下命令将其移动到另一个位置move_uploaded_file()

http://php.net/manual/en/function.move-uploaded-file.php

然后,您可以通过多种方式调用您的 Perl 脚本,如下所述:

如何从 PHP 调用 Perl 脚本?

所以,假设你正在使用exec()函数的低级方法,并且文件被上传到名为“userfile”的文件上传字段中,你可能会使用这样的东西:

$perlCommand = // ... something, e.g. from config ...
$workingPath = // ... something, e.g. from config ...
$filename = $workingPath . $_FILES['userfile']['name']
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $filename)) {
    $output = array();
    $return = 0;
    exec($perlCommand . ' ' . $filename, $output, $return);
    // Do something with $output and / or $return values
}

请注意,这假定 Perl 脚本将文件名作为参数。可能是它从标准输入中读取文件,问题并不清楚。显然,如果是后者,那么它会有点不同,这又取决于您用来调用 Perl 的方法。

于 2013-02-02T10:11:02.747 回答
0

谢谢@leftclickben

我已经解决了这个问题。我使用表单从用户那里获取文件,然后将文件名保存到参数$file中。

然后我$file使用传递给 Perl 脚本

$result = shell_exec("path\to\perl.pl" $file);
echo $result;

$file作为名为的数组传递给 perl.pl$ARGV[0]

#!usr/bin/perl

$filename = $ARGV[0];
open(HDL, $filename) or die "file not available, restart program\n";
于 2013-02-05T19:42:12.150 回答