【问题标题】:Can't run exec()/shell_exec() on 1&1 server无法在 1&1 服务器上运行 exec()/shell_exec()
【发布时间】:2013-11-23 10:49:42
【问题描述】:

编辑
我正在尝试使用其中一个函数在后台运行 php 文件但没有成功。
这不是将在后台执行的文件(真正的会发送电子邮件),我使用此方法找出哪个命令参数是正确的
文件权限0644;文件夹权限:0755
tets.php:

<html>
    <head>
    </head>
    <body>
        <pre>
        <?php
            $ex='php5 -f /homepages/23/d293813614/htdocs/amazonmobilewebsites/extendedcomingsoon/admin/run.php';
            exec($ex,$return);
            echo print_r($return,true);
        ?>
        </pre>
    </body>
</html>

run.php(从 url 工作):

<html>
    <head>
    </head>
    <body>
        <pre>
        <?php
            $fp = fopen('/homepages/23/d293813614/htdocs/amazonmobilewebsites/extendedcomingsoon/admin/data.txt', 'w+');
            fwrite($fp, '1');
            fclose($fp);
            echo 'printed';
        ?>
        </pre>
    </body>
</html>

这些是我的尝试:

$ex='php5 -f /homepages/23/d293813614/htdocs/amazonmobilewebsites/extendedcomingsoon/admin/run.php';

$ex='php -f /homepages/23/d293813614/htdocs/amazonmobilewebsites/extendedcomingsoon/admin/run.php';

$ex='/usr/lib/php6 -f /homepages/23/d293813614/htdocs/amazonmobilewebsites/extendedcomingsoon/admin/run.php';

首先->

Array
    [89] =>     [79] =>     [69] =>     [59] =>     [49] =>     [39] =>     [29] =>     [19] =>     [9] => (
    [90] =>     [80] =>     [70] =>     [60] =>     [50] =>     [40] =>     [30] =>     [20] =>     [10] =>     [0] => X-Powered-By: PHP/5.2.17
    [91] =>     [81] =>     [71] =>     [61] =>     [51] =>     [41] =>     [31] =>     [21] =>     [11] =>     [1] => Content-type: text/html
    [92] =>     [82] =>     [72] =>     [62] =>     [52] =>     [42] =>     [32] =>     [22] =>     [12] =>     [2] =>
    [93] =>     [83] =>     [73] =>     [63] =>     [53] =>     [43] =>     [33] =>     [23] =>     [13] =>     [3] => 
    [94] =>     [84] =>     [74] =>     [64] =>     [54] =>     [44] =>     [34] =>     [24] =>     [14] =>     [4] =>  
    [95] =>     [85] =>     [75] =>     [65] =>     [55] =>     [45] =>     [35] =>     [25] =>     [15] =>     [5] =>  
    [96] =>     [86] =>     [76] =>     [66] =>     [56] =>     [46] =>     [36] =>     [26] =>     [16] =>     [6] =>  
    [97] =>     [87] =>     [77] =>     [67] =>     [57] =>     [47] =>     [37] =>     [27] =>     [17] =>     [7] =>      

    [98] =>     [88] =>     [78] =>     [68] =>     [58] =>     [48] =>     [38] =>     [28] =>     [18] =>     [8] =>      

    [99] =>     [89] =>     [79] =>     [69] =>     [59] =>     [49] =>     [39] =>     [29] =>     [19] =>     [9] => Warning:  exec() [function.exec]: Unable to fork [php5 -f /homepages/23/d293813614/htdocs/amazonmobilewebsites/extendedcomingsoon/admin/run.php] in /homepages/23/d293813614/htdocs/amazonmobilewebsites/extendedcomingsoon/admin/test.php on line 8

    [100] =>     [90] =>     [80] =>     [70] =>     [60] =>     [50] =>     [40] =>     [30] =>     [20] =>     [10] => Array
    [101] =>     [91] =>     [81] =>     [71] =>     [61] =>     [51] =>     [41] =>     [31] =>     [21] =>     [11] => (
    [102] =>     [92] =>     [82] =>     [72] =>     [62] =>     [52] =>     [42] =>     [32] =>     [22] =>     [12] => )
    [103] =>     [93] =>     [83] =>     [73] =>     [63] =>     [53] =>     [43] =>     [33] =>     [23] =>     [13] =>        


    [104] =>     [94] =>     [84] =>     [74] =>     [64] =>     [54] =>     [44] =>     [34] =>     [24] =>     [14] =>    
    [105] =>     [95] =>     [85] =>     [75] =>     [65] =>     [55] =>     [45] =>     [35] =>     [25] =>     [15] => 
    [106] =>     [96] =>     [86] =>     [76] =>     [66] =>     [56] =>     [46] =>     [36] =>     [26] => )

第二个没有警告的相同数组,第三个是空数组

【问题讨论】:

    标签: php exec shell-exec


    【解决方案1】:

    它可能在你的主机上被禁用了,但 php 本身没有,所以你为什么不直接include 文件呢?

    如果您的 php 需要很长时间才能运行,您可以执行以下操作:

    ignore_user_abort(true);
    set_time_limit(0);
    
    your_long_function();
    

    这意味着您的脚本会无限期地运行(您可以离开页面),这可能是一件危险的事情。注意不要进行任何无限循环。

    ignore_user_abort
    set_time_limit

    请参阅this answer 了解其他一些选项。

    【讨论】:

    • 这不是将在后台执行的文件(真正的会发送电子邮件),我用这种方法找出哪个命令参数是正确的
    • 是的,但是如果需要发送 2000 封电子邮件,这将需要很多时间,我必须等到过程结束
    • @Dheed 我添加了另一个选项
    • 即使通过 ajax 调用也能正常工作吗?因为这是顺序:用户写邮件 -> 向 function.php 发送 ajax 请求 -> function php 在后台放置一个进程 sendmail.php。我应该如何表现?
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 2014-05-04
    相关资源
    最近更新 更多