Рейтинг:0

Как использовать kdeconnect-cli с Apache2 и PHP

флаг us

[обновлено снова!] прекратите изменять мой вопрос, он стал неточным.

У меня установлен kdeconnect 1.4.0 на Ubuntu 20.04.2 LTS Focal, и он работает. Я могу отправить текст из командной строки, используя пользователя, с которым я установил kdeconnect.

Моя текущая задача состоит в том, чтобы выполнить команду «kdeconnect-cli» с помощью Apache2 версии 2.4.41 с PHP версии 7.4.

Я думал, что это будет так же просто, как добавить путь к команде в PHP.INI, но это ничего не дает.

Apache2 работает как пользователь www-data, и я внес эти изменения, чтобы предоставить привилегию и запустить команду. Но это все еще не работает.

  • я использовал shell_exec и он возвращается пустым. Я проверил это и не получил результата

$command = "kdeconnect-cli --send-sms $message --destination $phoneNumber --device 26de31sdfbc6b97f"; $ output = shell_exec ($ команда); эхо "<pre>$output</pre>";

  • Я добавил команду в файл /etc/php/7.4/cli/php.ini

include_path = ".:/usr/bin"

  • Я добавил эту строку в файл sudoers

www-данные ВСЕ=(KDEUSER) NOPASSWD: /usr/bin/kdeconnect_cli

  • Я попытался создать файл .sh, который запускает kdeconnect-cli, и он работает в терминале, но не работает, если он запускается с помощью «www-data» в PHP.

Моя конечная цель — запустить kdeconnect-cli с PHP, что мне не хватает?

Заранее спасибо.

P.S. Не редактируйте мой вопрос.

Raffa avatar
флаг jp
PHP [`shell_exec`] (https://www.php.net/manual/en/function.shell-exec.php) создан для этого.
newtoallthis avatar
флаг us
Я проверил это и не получил результата `$command = "kdeconnect-cli --send-sms $message --destination $phoneNumber --device 26de31sdfbc6b97f"; $ output = shell_exec ($ команда); эхо"";`
newtoallthis avatar
флаг us
На этом сайте так сложно заставить текст отображаться правильно, это мой первый раз. Пожалуйста, обнажись со мной.
muru avatar
флаг us
Тогда не говорите «P.S. Не редактируйте мой вопрос». когда люди, которые знают, как правильно форматировать вещи, пытаются исправить их для вас. Этот сайт поощряет людей, редактирующих чужие сообщения, так что научитесь принимать их. Я не вижу, где я сделал что-то «неточное».
newtoallthis avatar
флаг us
Пули и прикрепленный текст были заменены на кодовые блоки. Маркеры — это способы упорядочения текста, и создание блоков кода, когда это не код, делает его неточным и нечитаемым.
muru avatar
флаг us
Списки велись как списки. На этом сайте мы предпочитаем форматировать содержимое файлов, например конфигурацию, в виде блоков кода. Это единственный способ точно и *точно* отобразить их.
Рейтинг:0
флаг jp

В одну сторону

Для этого в PHP есть встроенная функция, которая называется shell_exec

(PHP 4, PHP 5, PHP 7, PHP 8)

shell_exec Выполнить команду через оболочку и вернуть полный вывод как строка

Другой путь

Сохраните данные формы PHP в файл в вашей системе и немедленно проанализируйте их в bash. Шаги просты:

  • Создайте каталог с разрешениями на чтение и запись для пользователя, который будет запускать веб-страницу PHP, например. www-данные и пользователь, который будет запускать скрипт bash, например. ты.

  • Запустите сценарий bash в фоновом режиме в качестве процесса для отслеживания вновь созданных файлов в каталоге, проанализируйте их для отправки сообщений, а затем удалите их после слов... используя inotify-инструменты вот так:

    #!/бин/баш
    
    # Изменяем путь к каталогу и устройству соответственно
    
    path_to_directory="/полный/путь/к/каталогу/к/сохранить/сообщения/"
    устройство = "26de31sdfbc6b97f" 
    
    inotifywait -m "$path_to_directory" -e создать |
    в то время как IFS=' 'прочитать файл действия пути;
        делать
        echo "Файл $path$ создан"
        в то время как IFS='|' читать -r н м
            делать      
            echo "Отправка: $m ---> $n через $device"
            kdeconnect-cli --send-sms "$m" --destination "$n" --device "$device"
            сделано < "$path$file"
        rm "$путь$файл"
        echo "Файл $path$ удален"
        сделано
    

    Установить inotify-инструменты с sudo apt установить инструменты inotify если он еще не установлен. После этого сохраните приведенный выше код в файл сценария, например отправить.ш, сделайте файл сценария исполняемым с помощью chmod +x send.sh затем запустите его с баш отправить.sh и держите его в рабочем состоянии.

  • Сделайте так, чтобы ваша страница PHP сохраняла данные формы (число и сообщение) в файл в том же каталоге и в одной строке с разделителем, например | между ними... и генерировать имя файла случайным образом, чтобы избежать перезаписи одного и того же файла. В качестве примера возьмем следующий фрагмент кода PHP:

    <?PHP
    // Измените следующие три строки.
    // Вы можете динамически присвоить номер формы $number и
    //ваше сообщение формы в $message
    
    $ число = "0096650123456";
    $message="Это тестовое сообщение.";
    $path_to_directory="/полный/путь/к/каталогу/к/сохранить/сообщения/";
    
    
    // Не изменяйте ниже этой строки
    
    $контент=$число . "|" . $ сообщение . "\п";
    $filename=$path_to_directory . ранд(0000, 9999) . ".msg";
    
    file_put_contents ($ имя файла, $ содержимое);
    
newtoallthis avatar
флаг us
Я использовал его, и он не работает и не возвращает никаких ошибок. Я проверил это и не получил результата \r\n `$command = "kdeconnect-cli --send-sms $message --destination $phoneNumber --device 26de31sdfbc6b97f";` \r\n `$ output = shell_exec ($ команда);` \r\n "эхо"";`
newtoallthis avatar
флаг us
Как создать возврат каретки в этих комментариях, чтобы комментарии были сделаны с тех пор?
newtoallthis avatar
флаг us
Казалось, это было решением, но оно тоже не сработало. https://stackoverflow.com/questions/48331794/php-shell-exec-doesnt-work-but-commands-work-from-console
Raffa avatar
флаг jp
@newtoallthis `shell_exec` - не единственное решение для вашего требования ... сохранение сообщения и номера телефона в файл и анализ/обработка его с помощью сценария bash - это еще один способ ..., я обновлю свой ответ, когда вернусь на свой компьютер, так как я сейчас комментирую с телефона… Это будет решено :)
newtoallthis avatar
флаг us
Одним из требований к этому проекту является то, что и сообщение, и номер телефона исходят из PHP. Я хотел бы остаться со сценарием bash, я был бы готов. Спасибо Раффа, я ценю вашу помощь.
Raffa avatar
флаг jp
@newtoallthis Это то, что я имел в виду ... они будут исходить из PHP, а затем сохранены в файл ... этот файл будет немедленно обработан сценарием bash, работающим в фоновом режиме, как процесс ... сообщение отправлено, а файл впоследствии удален ... и так далее on¦ с тобой все в порядке?
newtoallthis avatar
флаг us
Конечно, все, что я пробовал, заблокировано «user-www» или проблемами с разрешениями. Итак, если у вас есть идея, я подожду, пока вы доберетесь до своего компьютера. Спасибо
Raffa avatar
флаг jp
@newtoallthis Сделано это... Надеюсь, это сработает для вас.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.