Score: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 --ปลายทาง $phoneNumber --device 26de31sdfbc6b97f"; $output = shell_exec($คำสั่ง); echo "<pre>$output</pre>";

  • ฉันเพิ่มคำสั่งลงในไฟล์ /etc/php/7.4/cli/php.ini

include_path = ".:/usr/bin"

  • ฉันเพิ่มบรรทัดนี้ในไฟล์ sudoers

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

  • ฉันได้ลองสร้างไฟล์ .sh ที่เรียกใช้ kdeconnect-cli และใช้งานได้ในเทอร์มินัล แต่ไม่ทำงานหากเรียกใช้โดย 'www-data' ใน PHP

เป้าหมายสูงสุดของฉันคือการเรียกใช้ kdeconnect-cli ด้วย PHP ฉันพลาดอะไรไป

ขอบคุณล่วงหน้า.

ป.ล. อย่าแก้ไขคำถามของฉัน

Raffa avatar
jp flag
[`shell_exec`](https://www.php.net/manual/en/function.shell-exec.php) ของ PHP ถูกสร้างขึ้นมาเพื่อสิ่งนั้น
newtoallthis avatar
us flag
ฉันได้ทดสอบสิ่งนี้แล้วและไม่ได้รับผลลัพธ์ `$command = "kdeconnect-cli --send-sms $message --destination $phoneNumber --device 26de31sdfbc6b97f"; $output = shell_exec($คำสั่ง); เสียงสะท้อน "";`
newtoallthis avatar
us flag
ไซต์นี้ยากที่จะแสดงข้อความให้ถูกต้อง นี่เป็นครั้งแรกของฉัน กรุณาเปลือยกายกับฉัน
muru avatar
us flag
จากนั้นอย่าพูดว่า "ป.ล. อย่าแก้ไขคำถามของฉัน" เมื่อคนที่รู้วิธีที่ถูกต้องในการจัดรูปแบบสิ่งต่างๆ พยายามแก้ไขให้คุณ ไซต์นี้ค่อนข้างสนับสนุนให้ผู้คนแก้ไขโพสต์ของผู้อื่น ดังนั้นเรียนรู้ที่จะยอมรับพวกเขา ฉันไม่เห็นว่าฉันทำอะไร "ไม่แม่นยำ" ตรงไหน
newtoallthis avatar
us flag
สัญลักษณ์แสดงหัวข้อย่อยและข้อความที่แนบมาถูกเปลี่ยนเป็นบล็อครหัส สัญลักษณ์แสดงหัวข้อย่อยเป็นวิธีการเรียงลำดับข้อความและทำให้บล็อกโค้ดเมื่อไม่ใช่โค้ด ทำให้ไม่แม่นยำและอ่านไม่ได้
muru avatar
us flag
รายการถูกเก็บไว้เป็นรายการ ในเว็บไซต์นี้ เราต้องการการจัดรูปแบบเนื้อหาไฟล์ เช่น การกำหนดค่าเป็นบล็อคโค้ด นั่นเป็นวิธีเดียวที่จะแสดงผลได้อย่างถูกต้องและ *แม่นยำ*
Score:0
ธง jp

ทางเดียว

มีฟังก์ชั่นในตัวสำหรับสิ่งนั้นใน PHP เรียกว่า shell_exec

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

shell_exec â ดำเนินการคำสั่งผ่านเชลล์และส่งคืนเอาต์พุตที่สมบูรณ์ เป็นสตริง

อีกวิธีหนึ่ง

บันทึกข้อมูลในฟอร์ม PHP ของคุณลงในไฟล์ในระบบของคุณและแยกวิเคราะห์ทันทีใน bash ขั้นตอนนั้นง่าย:

  • สร้างไดเร็กทอรีที่มีสิทธิ์อ่านและเขียนสำหรับทั้งผู้ใช้ที่จะเรียกใช้หน้าเว็บ PHP เช่น www-ข้อมูล และผู้ใช้ที่จะเรียกใช้สคริปต์ทุบตีเช่น คุณ.

  • เรียกใช้สคริปต์ทุบตีในพื้นหลังเป็นกระบวนการเพื่อตรวจสอบไฟล์ที่สร้างขึ้นใหม่ในไดเร็กทอรี แยกวิเคราะห์เพื่อส่งข้อความ จากนั้นลบออกหลังจากคำ... ใช้ เครื่องมือ inotify เช่นนั้น:

    #!/bin/bash
    
    # เปลี่ยนเส้นทางไปยังไดเร็กทอรีและอุปกรณ์ตามนั้น
    
    path_to_directory="/full/path/to/the/directory/to/save/messages/"
    อุปกรณ์ = "26de31sdfbc6b97f" 
    
    inotifywait -m "$path_to_directory" -e สร้าง |
    ในขณะที่ IFS=' ' อ่านไฟล์การดำเนินการของพาธ;
        ทำ
        echo "$path$file ถูกสร้างขึ้น"
        ในขณะที่ IFS='|' อ่าน -r n m
            ทำ      
            echo "กำลังส่ง: $m ---> $n ผ่าน $device"
            kdeconnect-cli --send-sms "$m" --ปลายทาง "$n" --device "$device"
            เสร็จแล้ว < "$path$file"
        rm "$เส้นทาง$ไฟล์"
        echo "ไฟล์ $path$ ถูกลบ"
        เสร็จแล้ว
    

    ติดตั้ง เครื่องมือ inotify กับ sudo apt ติดตั้งเครื่องมือ inotify หากยังไม่ได้ติดตั้ง หลังจากนั้นให้บันทึกโค้ดด้านบนลงในไฟล์สคริปต์เช่น send.shทำให้ไฟล์สคริปต์สามารถเรียกใช้งานได้ด้วย chmod +x send.sh จากนั้นเรียกใช้ด้วย ทุบตี send.sh และให้มันทำงานต่อไป

  • ทำให้หน้า PHP ของคุณบันทึกข้อมูลแบบฟอร์มของคุณ (ตัวเลขและข้อความ) ลงในไฟล์ในไดเร็กทอรีเดียวกันและในหนึ่งบรรทัดด้วยตัวคั่นเช่น | ระหว่างพวกเขา... และสร้างชื่อไฟล์แบบสุ่มเพื่อหลีกเลี่ยงการเขียนทับไฟล์เดียวกัน ใช้ส่วนย่อย PHP ต่อไปนี้เป็นตัวอย่าง:

    <?PHP
    // แก้ไขสามบรรทัดต่อไปนี้
    // คุณสามารถกำหนดหมายเลขแบบฟอร์มของคุณแบบไดนามิกให้กับ $number และ
    // ข้อความในแบบฟอร์มของคุณไปยัง $message
    
    $number="0096650123456";
    $message="นี่คือข้อความทดสอบ";
    $path_to_directory="/full/path/to/the/directory/to/save/messages/";
    
    
    // ห้ามแก้ไขใต้บรรทัดนี้
    
    $content=$number "|" . $ข้อความ "\n";
    $filename=$path_to_directory แรนด์(0000, 9999) . ".msg";
    
    file_put_contents($ชื่อไฟล์,$content);
    
newtoallthis avatar
us flag
ฉันใช้มันและใช้งานไม่ได้และไม่ส่งคืนข้อผิดพลาดใด ๆ ฉันได้ทดสอบสิ่งนี้แล้วและไม่ได้รับผลลัพธ์ \r\n `$command = "kdeconnect-cli --send-sms $message --destination $phoneNumber --device 26de31sdfbc6b97f";` \r\n `$output = shell_exec($command);` \r\n `เสียงสะท้อน "";`
newtoallthis avatar
us flag
คุณจะสร้างการขึ้นบรรทัดใหม่ในความคิดเห็นเหล่านี้ได้อย่างไร
newtoallthis avatar
us flag
ดูเหมือนว่านี่เป็นวิธีแก้ปัญหา แต่ก็ไม่ได้ผลเช่นกัน https://stackoverflow.com/questions/48331794/php-shell-exec-doesnt-work-but-commands-work-from-console
Raffa avatar
jp flag
@newtoallthis `shell_exec` ไม่ใช่ทางออกเดียวสำหรับความต้องการของคุณ⦠การบันทึกข้อความและหมายเลขโทรศัพท์ลงในไฟล์และแยกวิเคราะห์ / ประมวลผลด้วยสคริปต์ทุบตีเป็นอีกวิธีหนึ่ง .. ฉันจะอัปเดตคำตอบเมื่อฉันกลับมา ไปยังคอมพิวเตอร์ของฉันในขณะที่ฉันกำลังแสดงความคิดเห็นจากโทรศัพท์ของฉันในขณะนี้⦠มันจะแก้ไขได้ :)
newtoallthis avatar
us flag
หนึ่งในข้อกำหนดของโครงการนี้คือทั้งข้อความและหมายเลขโทรศัพท์มาจาก PHP ฉันหวังว่าฉันจะอยู่กับ bash script ได้ ฉันคงเสร็จแล้ว ขอบคุณ Raffa ฉันขอขอบคุณสำหรับความช่วยเหลือของคุณ
Raffa avatar
jp flag
@newtoallthis นั่นคือสิ่งที่ฉันหมายถึง – พวกเขาจะเริ่มต้นจาก PHP แล้วบันทึกเป็นไฟล์ – ไฟล์นั้นจะถูกประมวลผลทันทีโดยสคริปต์ทุบตีที่ทำงานในพื้นหลังเป็นข้อความกระบวนการ – ส่งและไฟล์ถูกลบหลังจากนั้น – และอื่น ๆ on⦠ตกลงกับคุณไหม
newtoallthis avatar
us flag
แน่นอน ทุกสิ่งที่ฉันได้ลองถูกล็อคโดย 'user-www' หรือปัญหาสิทธิ์ ถ้าคุณมีไอเดีย ฉันจะรอจนกว่าคุณจะไปถึงคอมพิวเตอร์ ขอบคุณ
Raffa avatar
jp flag
@newtoallthis เสร็จแล้ว ... ฉันหวังว่ามันจะเหมาะกับคุณ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา