Điểm:0

Cách sử dụng kdeconnect-cli với Apache2 và PHP

lá cờ us

[cập nhật lại!] ngừng thay đổi câu hỏi của tôi, nó trở nên không chính xác.

Tôi đã cài đặt kdeconnect 1.4.0 trên Ubuntu 20.04.2 LTS Focal và nó đang hoạt động. Tôi có thể nhắn tin từ dòng lệnh bằng người dùng mà tôi đã sử dụng kdeconnect đã cài đặt cùng.

Nhiệm vụ hiện tại của tôi là để lệnh "kdeconnect-cli" có thể thực thi được bằng Apache2 phiên bản 2.4.41 với phiên bản PHP 7.4.

Tôi nghĩ nó sẽ đơn giản như việc thêm đường dẫn tới lệnh vào PHP.INI, nhưng điều đó không có tác dụng gì.

Apache2 chạy dưới dạng dữ liệu www của người dùng và tôi đã thực hiện những thay đổi này để cấp đặc quyền và chạy lệnh. Nhưng nó vẫn không hoạt động.

  • tôi đã sử dụng shell_exec và nó trả về trống. Tôi đã thử nghiệm điều này và không nhận được đầu ra

$command = "kdeconnect-cli --send-sms $message --destination $phoneNumber --device 26de31sdfbc6b97f"; $output = shell_exec($command); tiếng vang "<pre>$đầu ra</pre>";

  • Tôi đã thêm lệnh vào tệp /etc/php/7.4/cli/php.ini

bao_path = ".:/usr/bin"

  • Tôi đã thêm dòng này vào tệp sudoers

www-data TẤT CẢ=(KDEUSER) NOPASSWD: /usr/bin/kdeconnect_cli

  • Tôi đã thử tạo một tệp .sh chạy kdeconnect-cli và nó hoạt động trong thiết bị đầu cuối, nhưng nó không hoạt động nếu được chạy bởi 'dữ liệu www' trong PHP

Mục tiêu cuối cùng của tôi là chạy kdeconnect-cli với PHP, tôi còn thiếu điều gì?

Cảm ơn trước.

Tái bút Đừng chỉnh sửa câu hỏi của tôi.

Raffa avatar
lá cờ jp
[`shell_exec`](https://www.php.net/manual/en/feft.shell-exec.php) của PHP được tạo ra cho điều đó.
newtoallthis avatar
lá cờ us
Tôi đã thử nghiệm điều này và không nhận được đầu ra `$command = "kdeconnect-cli --send-sms $message --destination $phoneNumber --device 26de31sdfbc6b97f"; $output = shell_exec($command); tiếng vang"";`
newtoallthis avatar
lá cờ us
Trang web này rất khó để có được văn bản hiển thị chính xác, đây là lần đầu tiên của tôi. Xin vui lòng trần với tôi.
muru avatar
lá cờ us
Sau đó, đừng nói "P.S. Đừng chỉnh sửa câu hỏi của tôi." khi những người biết cách chính xác để định dạng mọi thứ cố gắng sửa chúng cho bạn. Trang web này khá khuyến khích mọi người chỉnh sửa bài đăng của người khác, vì vậy hãy học cách chấp nhận chúng. Tôi không thấy nơi tôi đã làm bất cứ điều gì "không chính xác".
newtoallthis avatar
lá cờ us
Các dấu đầu dòng và văn bản đính kèm đã được thay đổi thành các khối mã. Dấu đầu dòng là cách để sắp xếp văn bản và biến chúng thành các khối mã khi nó không phải là mã khiến văn bản không chính xác và không thể đọc được.
muru avatar
lá cờ us
Các danh sách được giữ dưới dạng danh sách. Trên trang web này, chúng tôi ưu tiên định dạng nội dung tệp, như cấu hình dưới dạng khối mã. Đó là cách duy nhất để hiển thị chúng một cách chính xác và *chính xác*.
Điểm:0
lá cờ jp

Một chiều

Có một chức năng tích hợp cho điều đó trong PHP được gọi là shell_exec

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

shell_exec â Thực thi lệnh qua trình bao và trả về kết quả hoàn chỉnh như một chuỗi

Cách khác

Lưu dữ liệu biểu mẫu PHP của bạn vào một tệp trên hệ thống của bạn và phân tích cú pháp ngay lập tức trong bash. Các bước rất dễ dàng:

  • Tạo một thư mục có quyền đọc và ghi cho cả người dùng sẽ chạy trang web PHP, ví dụ:. dữ liệu www và người dùng sẽ chạy tập lệnh bash, ví dụ: bạn.

  • Chạy tập lệnh bash trong nền như một quá trình để theo dõi các tệp mới được tạo trong thư mục, phân tích cú pháp chúng để gửi tin nhắn và sau đó xóa chúng sau lời bạt... bằng cách sử dụng công cụ inotify như vậy:

    #!/bin/bash
    
    # Thay đổi đường dẫn đến thư mục và thiết bị cho phù hợp
    
    path_to_directory="/full/path/to/the/directory/to/save/messages/"
    thiết bị="26de31sdfbc6b97f" 
    
    inotifywait -m "$path_to_directory" -e tạo |
    trong khi IFS=' ' đọc tệp hành động đường dẫn;
        làm
        echo "$path$file đã được tạo"
        trong khi IFS='|' đọc -r n m
            làm      
            echo "Đang gửi: $m ---> $n qua $device"
            kdeconnect-cli --send-sms "$m" --destination "$n" --device "$device"
            xong < "$path$file"
        rm "$path$file"
        echo "$path$file đã bị xóa"
        xong
    

    Cài đặt công cụ inotify với Sudo apt cài đặt công cụ inotify nếu nó chưa được cài đặt. Sau đó, lưu đoạn mã trên vào một tệp script như gửi.sh, làm cho tệp tập lệnh có thể thực thi được với chmod +x gửi.sh sau đó chạy nó với bash gửi.sh và giữ cho nó chạy.

  • Làm cho trang PHP của bạn lưu dữ liệu biểu mẫu của bạn (số và tin nhắn) vào một tệp trong cùng thư mục và trong một dòng có dấu phân cách như | giữa chúng... và tạo tên tệp một cách ngẫu nhiên để tránh ghi đè lên cùng một tệp. Lấy đoạn mã PHP sau đây làm ví dụ:

    <?PHP
    //Sửa đổi ba dòng sau.
    //Bạn có thể tự động gán số biểu mẫu của mình cho $number và
    // tin nhắn biểu mẫu của bạn tới $message
    
    $number="0096650123456";
    $message="Đây là tin nhắn thử nghiệm.";
    $path_to_directory="/full/path/to/the/directory/to/save/messages/";
    
    
    // Không sửa đổi bên dưới dòng này
    
    $content=$number . "|" . $tin nhắn . "\N";
    $filename=$path_to_directory . rand(0000, 9999) . ".msg";
    
    file_put_contents($filename, $content);
    
newtoallthis avatar
lá cờ us
Tôi đã sử dụng nó và nó không hoạt động và không trả về bất kỳ lỗi nào. Tôi đã thử nghiệm điều này và không nhận được đầu ra \r\n `$command = "kdeconnect-cli --send-sms $message --destination $phoneNumber --device 26de31sdfbc6b97f";` \r\n `$output = shell_exec($command);` \r\n `tiếng vang "";`
newtoallthis avatar
lá cờ us
Làm cách nào để bạn tạo dấu xuống dòng trong những nhận xét này để nhận xét có từ đó?
newtoallthis avatar
lá cờ us
Có vẻ như đây là giải pháp nhưng nó cũng không hoạt động. https://stackoverflow.com/questions/48331794/php-shell-exec-doesnt-work-but-commands-work-from-console
Raffa avatar
lá cờ jp
@newtoallthis `shell_exec` không phải là giải pháp duy nhất cho yêu cầu của bạn... lưu tin nhắn và số điện thoại vào một tệp và phân tích/xử lý nó bằng tập lệnh bash là một cách khác .., tôi sẽ cập nhật câu trả lời của mình khi tôi quay lại vào máy tính của tôi khi tôi đang bình luận từ điện thoại của mình... Nó sẽ được giải quyết :)
newtoallthis avatar
lá cờ us
Một trong những yêu cầu đối với dự án này là tin nhắn và số điện thoại đều bắt nguồn từ PHP. Tôi ước tôi có thể ở lại với tập lệnh bash, tôi đã hoàn thành rồi. Cảm ơn Raffa, tôi đánh giá cao sự giúp đỡ của bạn.
Raffa avatar
lá cờ jp
@newtoallthis Đó là ý của tôi …¦ chúng sẽ bắt nguồn từ PHP và sau đó được lưu vào tệp… tệp đó sẽ được xử lý ngay lập tức bằng tập lệnh bash chạy trong nền dưới dạng một quy trình¦ tin nhắn được gửi và tệp bị xóa sau đó… và cứ thế on⦠bạn có ổn không?
newtoallthis avatar
lá cờ us
Chắc chắn rồi, mọi thứ tôi đã thử đều bị khóa bởi 'user-www' hoặc các vấn đề về quyền. Vì vậy, nếu bạn có một ý tưởng, tôi sẽ đợi cho đến khi bạn đến máy tính của mình. Cảm ơn
Raffa avatar
lá cờ jp
@newtoallthis Xong rồi... Tôi hy vọng nó hiệu quả với bạn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.