我有一个 perl 脚本,它将输入作为文件并以文本文件的形式返回结果。我想使用文件作为输入,由用户通过 php 页面上传。为此我该怎么办?我有 PHP 5.3.14 和 ActivePerl 5.14.x。
问问题
705 次
2 回答
0
在 PHP 中,当一个文件被上传时,它首先被放置在一个临时位置。您可以使用以下命令将其移动到另一个位置move_uploaded_file()
:
http://php.net/manual/en/function.move-uploaded-file.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 回答