来自CGI程序的“没有这样的文件或目录”,但是从shell执行

时间:2017-10-03 11:30:13

标签: perl cgi symlink

我有一个Perl CGI脚本,它使用system运行另一个Perl程序。

我在调用-x之前添加了system测试,当从shell运行时,它评估为 true 但是当执行时, false CGI服务器。该文件是一个符号链接。

当我使用绝对文件路径时,它也会在Web上评估为 true ,但在执行条件代码时,我收到No such file or directory错误。

#!/usr/bin/perl

use strict;
use utf8;
use warnings;

use CGI::Carp 'fatalsToBrowser';

our ($CMD) = '/relative/path/file';

if ( -x $CMD ) {
  my $output;
  $output = system($CMD);
  print $output;
}

ls -l /relative/path/file的结果是:

-rwxr-xr-x 1 root something 19398 Sep 23 00:00 /relative/path/file

总结

  • 代码在shell上执行时有效,但不在Web上执行

  • 如果我使用相对路径-x,则测试评估为假

  • 如果我使用完整路径,则-x评估为true,但system()调用会引发No such file or directory错误。

2 个答案:

答案 0 :(得分:0)

在尝试运行脚本时,你是不是在调用Perl?

$output = system("perl $CMD");

答案 1 :(得分:0)

只是一种可能性......是否找不到/ relative / path /文件中运行的某些代码的文件?可能它会在代码中访问一些相对路径?