2013-02-15 31 views
13

Làm cách nào tôi có thể làm theo hướng dẫn như thế này mà không cần sử dụng dòng lệnh?thiết lập websockets mà không cần dòng lệnh

http://www.flynsarmy.com/2012/02/php-websocket-chat-application-2-0/

tôi cần để có thể sử dụng WebSockets nhưng có một máy chủ chia sẻ và không có quyền truy cập vào các dòng lệnh.

Tôi không thể chạy tập lệnh từ trình duyệt, nếu tập lệnh sẽ ngừng chạy khi tôi đóng trình duyệt/ngắt kết nối khỏi internet.

Trả lời

13

Giả sử chia sẻ cung cấp dịch vụ lưu trữ của bạn hỗ trợ crontab và cron công việc (hầu hết trong số họ làm), thêm các công việc sau đây để crontab:

@reboot nohup php /path/to/server.php 2>&1 >/dev/null & 

Ngoài ra, bạn cần phải bắt đầu nó bây giờ, vì vậy chỉ cần tạo những điều sau đây Tệp PHP và truy cập nó một lần, trong trình duyệt của bạn:

<?php shell_exec('nohup php /path/to/server.php 2>&1 > /dev/null &');?> 

Điều đó sẽ làm điều đó. Hy vọng rằng nhà cung cấp dịch vụ lưu trữ dùng chung của bạn cho phép thực hiện các cuộc gọi execve(). Chúc may mắn!

+0

điều này về cơ bản sẽ giữ cho kịch bản luôn luôn mở/chấp nhận các kết nối? Tôi có thể chạy các công việc cron và chạy tập lệnh đó nhưng nó không thực sự nói 'crontab' ở bất kỳ đâu trên trang. Tôi đoán đó chỉ là ngụ ý rằng đó là 'crontab' s mặc dù và rằng nó sẽ làm việc? .. Tôi có thể chạy lệnh shell_exec. bạn có nghĩa là hy vọng họ cho phép lệnh đó? – maxhud

+0

Nếu bạn sử dụng _nohup_ để khởi chạy tệp _server.php_, nó sẽ luôn giữ cho tập lệnh mở và chấp nhận các kết nối.Về cơ bản, mã PHP 'shell_exec()' được đăng trước đó sẽ khởi động máy chủ socket của bạn. Công việc cron chỉ đơn giản là để khởi động tập tin _server.php_ nếu máy chủ lưu trữ được chia sẻ của bạn khởi động lại. –

+0

Cảm ơn bạn đã dành thời gian và giải pháp – maxhud

1

Cũng thử chạy Server.php trên trình duyệt. Hầu hết thời gian một tập lệnh php-cli cũng hoạt động tốt trên trình duyệt (Cho đến khi sử dụng một số chức năng chỉ có dòng lệnh như argv/argc, v.v.). Trên tab khác của trình duyệt trên một trình duyệt khác, bạn có thể chạy url thông thường như ảnh chụp màn hình trong hướng dẫn cụ thể.

Một điều quan trọng, Vui lòng kiểm tra ổ cắm và các tiện ích bắt buộc khác được bật hay không trên máy chủ được chia sẻ của bạn.

+0

về cơ bản sẽ bắt đầu tập lệnh php và giữ nó chạy trên máy chủ? ... có vẻ như đó là điều cần làm – maxhud

+0

Nó sẽ bắt đầu tập lệnh máy chủ của bạn và tiếp tục chạy cho đến khi tab/cửa sổ trình duyệt đóng lại (nhưng chỉ trong trường hợp nếu id mã máy chủ không phụ thuộc vào một số chức năng chỉ sử dụng php.). –

+0

Tôi cần một giải pháp không yêu cầu tôi phải mở trang trình duyệt ... – maxhud

0

Tôi không biết về chỉ thị @reboot của CRON cho đến bây giờ, vì vậy giải pháp @Octav O có lẽ tốt hơn nhiều. Nhưng trong khi thử nghiệm, tôi tìm thấy đoạn mã sau (tìm thấy trên Saran's websocket tutorial) khá hữu ích.

Lưu này như websocket_launch.sh trong cùng một thư mục như server.php ...

PID=`ps -aef | grep "server.php" | grep -v grep | awk '{print $2}'` 
if [ -z $PID ] 
then 
    #echo "Launching now" 
    nohup php server.php > error_log & 
else 
    #echo "Running as PID $PID" 
fi 

... sau đó chạy shell script với CRON mỗi phút. Kịch bản lệnh sẽ kiểm tra xem server.php có đang chạy hay không và nếu không, sẽ khởi chạy nó.

Các vấn đề liên quan