【发布时间】:2013-02-06 03:54:31
【问题描述】:
我有一个 perl 脚本,它将输入作为文件并以文本文件的形式返回结果。我想使用文件作为输入,由用户通过 php 页面上传。为此我该怎么办?我有 PHP 5.3.14 和 ActivePerl 5.14.x。
【问题讨论】:
-
首先,您尝试过什么?其次,您是在问如何在 PHP 中使用上传的文件?或者如何将它从 perl 脚本直接传递给要返回结果的 php 脚本?
我有一个 perl 脚本,它将输入作为文件并以文本文件的形式返回结果。我想使用文件作为输入,由用户通过 php 页面上传。为此我该怎么办?我有 PHP 5.3.14 和 ActivePerl 5.14.x。
【问题讨论】:
在 PHP 中,当一个文件被上传时,它首先被放置在一个临时位置。您可以使用move_uploaded_file() 将其移动到另一个位置:
http://php.net/manual/en/function.move-uploaded-file.php
然后,您可以通过多种方式调用您的 Perl 脚本,如下所述:
How can I call a Perl script from PHP?
所以,假设您正在使用 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 的方法。
【讨论】:
感谢@leftclickben
我已经解决了这个问题。我使用表单从用户那里获取文件,然后将文件名保存到参数$file。
然后我将 $file 传递给 Perl 脚本使用
$result = shell_exec("path\to\perl.pl" $file);
echo $result;
$file 作为名为 $ARGV[0] 的数组传递给 perl.pl
#!usr/bin/perl
$filename = $ARGV[0];
open(HDL, $filename) or die "file not available, restart program\n";
【讨论】: