如何在 Apache2 和 PHP 中使用 kdeconnect-cli

如何在 Apache2 和 PHP 中使用 kdeconnect-cli

[再次更新!] 不要再改变我的问题了,它变得不精确了。

我在 Ubuntu 20.04.2 LTS Focal 上安装了 kdeconnect 1.4.0,它可以正常工作。我能够使用安装 kdeconnect 时使用的用户从命令行发送文本。

我当前的任务是让 Apache2 版本 2.4.41 和 PHP 版本 7.4 执行命令“kdeconnect-cli”。

我以为这就像将命令路径添加到 PHP.INI 一样简单,但是这没有任何作用。

Apache2 以用户 www-data 身份运行,我进行了这些更改以授予权限并运行命令。但它仍然不起作用。

  • 我使用了shell_exec它,它返回空白。我已经测试过了,没有输出任何结果。

$command = "kdeconnect-cli --send-sms $message --destination $phoneNumber --device 26de31sdfbc6b97f"; $output = shell_exec($command); echo "<pre>$output</pre>";

  • 我将该命令添加到 /etc/php/7.4/cli/php.ini 文件中

include_path =“。:/usr/bin”

  • 我将此行添加到 sudoers 文件中

www-数据 ALL=(KDEUSER) NOPASSWD: /usr/bin/kdeconnect_cli

  • 我尝试制作一个运行 kdeconnect-cli 的 .sh 文件,它在终端中可以运行,但如果在 PHP 中通过“www-data”运行则不行

我的最终目标是使用 PHP 运行 kdeconnect-cli,我缺少什么?

提前致谢。

PS,不要编辑我的问题。

答案1

单程

PHP 中有一个内置函数,名为shell_exec

(PHP 4、PHP 5、PHP 7、PHP 8)

shell_exec— 通过 shell 执行命令并以字符串形式返回完整输出

其他方式

将 PHP 表单数据保存到系统上的文件中,然后立即在 bash 中解析。步骤很简单:

  • 为将运行 PHP 网页的用户(例如)www-data和将运行 bash 脚本的用户(例如)创建具有读写权限的目录you

  • 在后台运行一个 bash 脚本作为进程来监视目录中新创建的文件,解析它们以发送消息,然后删除它们...使用方式inotify-tools如下:

    #!/bin/bash
    
    # Change the path to directory and the device accordingly
    
    path_to_directory="/full/path/to/the/directory/to/save/messages/"
    device="26de31sdfbc6b97f" 
    
    inotifywait -m "$path_to_directory" -e create |
    while IFS=' ' read path action file;
        do
        echo "$path$file was created"
        while IFS='|' read -r n m
            do      
            echo "Sending: $m ---> $n via $device"
            kdeconnect-cli --send-sms "$m" --destination "$n" --device "$device"
            done < "$path$file"
        rm "$path$file"
        echo "$path$file was deleted"
        done
    

    如果尚未安装,请使用 安装。之后,将上述代码保存到脚本文件(如)inotify-tools,使用使脚本文件可执行,然后使用 运行它并保持其运行。sudo apt install inotify-toolssend.shchmod +x send.shbash send.sh

  • 让您的 PHP 页面将表单数据(编号和消息)保存到同一目录中的文件中,并在一行中使用分隔符(如|...)并随机生成文件名以避免覆盖同一个文件。以以下 PHP 代码片段为例:

    <?PHP
    //Modify the following three lines.
    //You can dynamically assign your form number to $number and
    //your form message to $message
    
    $number="0096650123456";
    $message="This is a test message.";
    $path_to_directory="/full/path/to/the/directory/to/save/messages/";
    
    
    //Do not modify beloww this line
    
    $content=$number . "|" . $message . "\n";
    $filename=$path_to_directory . rand(0000, 9999) . ".msg";
    
    file_put_contents($filename, $content);
    

相关内容