Puncte:0

Cum să utilizați kdeconnect-cli cu Apache2 și PHP

drapel us

[actualizat din nou!] nu mai schimba întrebarea mea, a devenit neprecizată.

Am kdeconnect 1.4.0 instalat pe Ubuntu 20.04.2 LTS Focal și este funcțional. Pot trimite text din linia de comandă folosind utilizatorul cu care am instalat kdeconnect.

Sarcina mea actuală este să fac comanda „kdeconnect-cli” executabilă de către Apache2 versiunea 2.4.41 cu PHP versiunea 7.4.

M-am gândit că ar fi la fel de simplu ca adăugarea căii la comandă la PHP.INI, dar asta nu face nimic.

Apache2 rulează ca utilizator www-data și am făcut aceste modificări pentru a acorda privilegiul și pentru a rula comanda. Dar tot nu funcționează.

  • obisnuiam shell_exec și se întoarce necompletat. Am testat asta și nu am rezultat

$command = "kdeconnect-cli --send-sms $message --destination $phoneNumber --dispozitiv 26de31sdfbc6b97f"; $ieșire = shell_exec($comandă); echo „<pre>$ieșire</pre>”;

  • Am adăugat comanda în fișierul /etc/php/7.4/cli/php.ini

include_path = ".:/usr/bin"

  • Am adăugat această linie la fișierul sudoers

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

  • Am încercat să fac un fișier .sh care rulează kdeconnect-cli și funcționează în terminal, dar nu funcționează dacă este rulat de „www-data” în PHP

Scopul meu final este să rulez kdeconnect-cli cu PHP, ce îmi lipsește?

Mulțumesc anticipat.

P.S. Nu-mi editați întrebarea.

Raffa avatar
drapel jp
PHP [`shell_exec`](https://www.php.net/manual/en/function.shell-exec.php) este creat pentru asta.
newtoallthis avatar
drapel us
Am testat asta și nu am rezultat `$command = "kdeconnect-cli --send-sms $message --destination $phoneNumber --device 26de31sdfbc6b97f"; $ieșire = shell_exec($comandă); ecou"";`
newtoallthis avatar
drapel us
Acest site este atât de greu de obținut text pentru a afișa corect, este prima dată. Te rog să te descurci cu mine.
muru avatar
drapel us
Apoi nu spune „P.S. Nu-mi editați întrebarea”. când oamenii care cunosc modul corect de a formata lucrurile încearcă să le repare pentru tine. Acest site este destul de încurajator pentru oameni care editează postările altora, așa că învață să le accepți. Nu văd unde am făcut ceva „neprecis”.
newtoallthis avatar
drapel us
Marcatoarele și textul atașat au fost schimbate în blocuri de cod. Marcatorii sunt modalități de a ordona text și de a le face blocuri de cod atunci când nu era cod îl face imprecis și ilizibil.
muru avatar
drapel us
Listele au fost păstrate ca liste. Pe acest site, preferăm formatarea conținutului fișierelor, cum ar fi configurarea ca blocuri de cod. Acesta este singurul mod de a le reda cu acuratețe și *precise.
Puncte:0
drapel jp

Într-un fel

Există o funcție încorporată pentru asta numită în PHP shell_exec

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

shell_exec â Executați comanda prin shell și returnați rezultatul complet ca o sfoară

Altă cale

Salvați datele formularului PHP într-un fișier de pe sistemul dvs. și analizați-l imediat în bash. Pașii sunt simpli:

  • Creați un director cu permisiuni de citire și scriere atât pentru utilizatorul care va rula pagina web PHP, de ex. www-data și utilizatorul care va rula scriptul bash de ex. tu.

  • Rulați un script bash în fundal ca proces pentru a monitoriza fișierele nou create în director, analizați-le pentru a trimite mesajele și apoi ștergeți-le după cuvintele... utilizând inotify-instrumente ca astfel:

    #!/bin/bash
    
    # Schimbați calea către director și dispozitivul în consecință
    
    path_to_directory="/full/path/to/the/directory/to/save/messages/"
    device="26de31sdfbc6b97f" 
    
    inotifywait -m „$calea_la_director” -e creați |
    în timp ce IFS=' ' citește fișierul de acțiune al căii;
        do
        echo „$path$file a fost creat”
        în timp ce IFS='|' citește -r n m
            do      
            echo "Trimitere: $m ---> $n prin $dispozitiv"
            kdeconnect-cli --send-sms „$m” --destination „$n” --device „$device”
            terminat < "$path$file"
        rm "$cale$fișier"
        echo „$cale$fișierul a fost șters”
        Terminat
    

    Instalare inotify-instrumente cu sudo apt install inotify-tools dacă nu este deja instalat. După aceea, salvați codul de mai sus într-un fișier script, cum ar fi trimite.sh, faceți fișierul script executabil cu chmod +x trimite.sh apoi rulează-l cu bash trimite.sh și ține-o să funcționeze.

  • Faceți ca pagina dvs. PHP să salveze datele formularului (numărul și mesajul) într-un fișier în același director și într-o singură linie cu un delimitator ca | între ele... și generați numele fișierului în mod aleatoriu pentru a evita suprascrierea aceluiași fișier. Luați următorul fragment PHP ca exemplu:

    <?PHP
    //Modificați următoarele trei rânduri.
    //Puteți atribui în mod dinamic numărul formularului la $number și
    //mesajul formularului dvs. către $message
    
    $number="0096650123456";
    $message="Acesta este un mesaj de testare.";
    $path_to_directory="/full/path/to/the/directory/to/save/messages/";
    
    
    //Nu modificați sub această linie
    
    $conținut=$număr . "|" . $mesaj . „\n”;
    $filename=$cale_la_director . rand(0000, 9999) . „.msg”;
    
    file_put_contents($nume fișier, $conținut);
    
newtoallthis avatar
drapel us
L-am folosit și nu funcționează și nu returnează nicio eroare. Am testat asta și nu am rezultat \r\n `$command = "kdeconnect-cli --send-sms $message --destination $phoneNumber --device 26de31sdfbc6b97f";` \r\n `$output = shell_exec($command);` \r\n „ecou”";`
newtoallthis avatar
drapel us
Cum să creezi o întoarcere de transport în aceste comentarii, astfel încât comentariile să apară de atunci?
newtoallthis avatar
drapel us
Părea că aceasta era soluția, dar nici nu a funcționat. https://stackoverflow.com/questions/48331794/php-shell-exec-doesnt-work-but-commands-work-from-console
Raffa avatar
drapel jp
@newtoallthis `shell_exec` nu este singura soluție pentru cerințele dvs.... salvarea mesajului și a numărului de telefon într-un fișier și analizarea/procesarea lui cu un script bash este o altă modalitate..., îmi voi actualiza răspunsul cu asta când mă întorc pe computerul meu, deoarece comentez de pe telefon acum... Se va rezolva :)
newtoallthis avatar
drapel us
Una dintre cerințele acestui proiect este ca mesajul și numărul de telefon să provină ambele din PHP. Mi-aș fi dorit să rămân cu scriptul bash, aș fi terminat. Mulțumesc Raffa, apreciez ajutorul tău.
Raffa avatar
drapel jp
@newtoallthis Asta am vrut să spun... vor proveni din PHP și apoi vor fi salvate în fișier... acel fișier va fi procesat instantaneu de scriptul bash care rulează în fundal ca un proces... mesaj trimis și fișierul șters apoi... și așa pe... e bine cu tine?
newtoallthis avatar
drapel us
Sigur, tot ce am încercat este blocat de „user-www” sau probleme de permisiune. Deci, dacă aveți o idee, voi aștepta până când ajungeți la computer. Mulțumiri
Raffa avatar
drapel jp
@newtoallthis Gata... Sper că funcționează pentru tine.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.