6

http://code.google.com/p/phpwebsocket/PHP )を使用して実装されたチャットアプリケーションがあり、ローカルホストでテストするときに、ローカルホストでサーバーを起動するコマンドを介してWebSocketサーバーを実行する必要がありますUbuntuターミナルで「Ctrl + c」を押すまで、ファイルは実行され続けます。while ループを実行し続けることを意味します。これは、サーバーが要求をリッスンするために起動する必要がある非常に正常な bcoz です。WebSockets"php server.php"

ここで、このアプリケーションを共有ホスティングでホストしているのではないかと疑っていSSHますが、アクセスできません。つまり、コマンドを実行するために使用したインターフェイスのようなターミナルを取得できないため、そのserver.phpスクリプトを実行してサーバーを起動するにはどうすればよいですか今?

はい、私が言及したことの1つは、スクリプトを1回実行するだけで、スクリプトは引き続き実行され、ホスティングプロバイダーはcron jobs.

助けてください、事前に感謝します。

4

3 に答える 3

8

共有ホスティングに SSH アクセスできないのは、かなり不安定です。それは言った...

execトリガーされたスクリプトからコマンドラインで何かを実行するために使用できます。たとえば、http://mysite.com/server/startのような URL から呼び出すコントローラー アクションがある場合、次の行を埋め込むことができます。

$lastLine = exec("php server.php");

もちろん、このコマンドはコマンドが終了するまで戻りません。そのため、このスクリプトから応答が得られることはありません (失敗しない限り)。したがってpopen、プロセスをフォークしてすぐに戻る を使用し、コントローラーが応答を返すようにします。

$handle = popen("php server.php", "r");

ある時点で、おそらくこのサーバーを停止したいと思うでしょう。少しの UNIX CLI マジックを使用passthruして、これを行うことができます。おそらく、 http://mysite.com/server/stopposix_killなどの URL から呼び出す別のコントローラー アクションで、次のように埋め込むことができます。

$output = passthru('ps ax | grep server\.php');
$ar = preg_split('/ /', $output);
if (in_array('/usr/bin/php', $ar)) {
    $pid = (int) $ar[0];
    posix_kill($pid, SIGKILL);
于 2013-07-17T16:39:56.647 に答える
0

実際には、シェル アクセスなしでデーモンを実行する方法はたくさんありますが、ホスティング会社は、デーモンを実行させたくないため、シェル アクセスをブロックします。

シェルにアクセスしたサーバーで作成する必要があります。つまり、アプリケーションには VPS が必要であり、共有ホスティングは役に立ちません。

于 2014-05-08T17:06:24.823 に答える