作为shell脚本在PHP上的权限被拒绝

作为shell脚本在PHP上的权限被拒绝,php,shell,ubuntu,Php,Shell,Ubuntu,我试着按照这里的说明来做: 我创建了一个名为“vardump”的文件 已将此代码添加到文件中: #!/usr/bin/php <?php var_dump($argv); ?> shiki@Etna:~/projects/tests$ ./vardump bash: ./vardump: Permission denied shiki@Etna:~/projects/tests$ sudo ./vardump sudo: unable to execute ./vardump:

我试着按照这里的说明来做:

  • 我创建了一个名为“vardump”的文件
  • 已将此代码添加到文件中:

    #!/usr/bin/php
    <?php
    var_dump($argv);
    ?>
    
    shiki@Etna:~/projects/tests$ ./vardump
    bash: ./vardump: Permission denied
    shiki@Etna:~/projects/tests$ sudo ./vardump
    sudo: unable to execute ./vardump: Permission denied
    
有什么问题吗?我正在运行Ubuntu 10.04

但是,像这样执行是可行的:

shiki@Etna:~/projects/tests$ php vardump
array(1) {
  [0]=>
  string(7) "vardump"
}
以下是文件权限:

shiki@Etna:~/projects/tests$ ls -l
-rwxrwxrwx 1 root root   41 2010-06-23 07:25 vardump

shiki@Etna:~/projects/tests$ ls -l /usr/bin/php
lrwxrwxrwx 1 root root 21 2010-06-02 15:34 /usr/bin/php -> /etc/alternatives/php

您是否有权在系统上运行/etc/alternations/php?当您使用
php vardump
运行脚本时,它可能使用与/etc/alternations/php不同的php二进制文件。要检查这一点,请运行
哪个php
,然后查看它打印出了什么。另外,
ls-l/etc/alternations/php的输出是什么

您可能使用两个不同的php实例吗?运行以下命令,它是否不是/usr/bin/php

which php

我会运行哪一个php?我知道在Ubuntu上php链接到/usr/bin/php(在Ubuntu 10.04桌面和服务器上测试),您的脚本在我的机器上运行良好,具有0777和0755权限,使用以下命令:

marco@FW2X9K1:~/Projects$ php -v
PHP 5.3.2-1ubuntu4.2 with Suhosin-Patch (cli) (built: May 13 2010 20:03:45) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

marco@FW2X9K1:~/Projects$ ls -lah vardump 
-rwxrwxrwx 1 marco marco 41 2010-06-22 20:17 vardump
marco@FW2X9K1:~/Projects$ ls -l /usr/bin/php
lrwxrwxrwx 1 root root 21 2010-05-26 09:15 /usr/bin/php -> /etc/alternatives/php
marco@FW2X9K1:~/Projects$ ls -l /etc/alternatives/php
lrwxrwxrwx 1 root root 13 2010-05-26 09:15 /etc/alternatives/php -> /usr/bin/php5
marco@FW2X9K1:~/Projects$ ls -l /usr/bin/php5
-rwxr-xr-x 1 root root 7836792 2010-05-13 16:20 /usr/bin/php5

marco@FW2X9K1:~/Projects$ ./vardump 
array(1) {
  [0]=>
  string(9) "./vardump"
}
这可能需要在serverfault中发布。最后,运行以下命令以确保所有内容都已正确安装

marco@FW2X9K1:~/Projects$ dpkg -l | grep php5
ii  libapache2-mod-php5                  5.3.2-1ubuntu4.2                                      server-side, HTML-embedded scripting languag
ii  php5                                 5.3.2-1ubuntu4.2                                      server-side, HTML-embedded scripting languag
ii  php5-cgi                             5.3.2-1ubuntu4.2                                      server-side, HTML-embedded scripting languag
ii  php5-cli                             5.3.2-1ubuntu4.2                                      command-line interpreter for the php5 script
ii  php5-common                          5.3.2-1ubuntu4.2                                      Common files for packages built from the php
ii  php5-dev                             5.3.2-1ubuntu4.2                                      Files for PHP5 module development
ii  php5-mysql                           5.3.2-1ubuntu4.2                                      MySQL module for php5

我想Marco Ceppi可能有问题。您是否安装了php5 cli软件包?请查看更多详细信息。

解决了它。根据您的所有回答,我怀疑问题根本不在php中。我在NTFS挂载上运行脚本,所以我尝试将其移动到根挂载,并在那里工作。因此我将
exec
添加到/etc/fstab和它的工作

UUID=0B02861D7B0D6A31 /media/Data ntfs-3g defaults,users,exec,locale=en_PH.UTF-8 0 0

也给了我线索。非常感谢你的帮助!

这是一个编程问题吗?而且,它似乎与php无关。
ls-l/usr/bin/php
向你展示了什么?@Mewp我自己也不太确定。这应该是在superuser中吗?@Wrikken我编辑了这个问题,以显示结果。
ch之后会发生什么mod 0755 vardump
?现在,它的权限是777,这和root一样有点危险。不,它仍然是
/usr/bin/php
它是
lrwxrwx rwx 1 root root 13 2010-06-02 15:34/etc/alternations/php->/usr/bin/php5
已知
哪个php
/usr/bin/php
它可能与php有关正如Marco提到的安装是的,安装了php5 cli。我认为这就是
php vardump
works.Nice的原因。感谢您将答案发布到该线程以供将来参考。作为一种解决方法,可能值得一提的是,只需运行
php myfile.php
就可以正常工作。