read_data.txt
ディレクトリ内のテキストファイルを呼び出しました/var/www/html/
。curl
ファイルの内容が変わったらデータを読みたいです。だからスクリプトを作成しましたbash
。コンテンツが変更されたら、データを読み、電子メールでコンテンツを送信します。ところで、そのデータをメールではなく特定のURLに送信したいと思います。
以下のスクリプトを使用しています。
curl -d data=@/var/www/html/read_data.txt" http://domain.tld/testing_receive_data/index.php/check_data_controller/check_data
上記のURLはすべての投稿データを受け取り、php関数を介してjson_encode
投稿配列をJSONデータに変換して記録しています。
curl -d data=@/var/www/html/read_data.txt" http://domain.tld/testing_receive_data/index.php/check_data_controller/check_data
Linuxシェルで上記のコードを実行すると、JSONデータが空であることがわかります。{"data"=[]}
答え1
考えられる理由はいくつかあります。
- プログラムがファイルに書き込むと、ファイルを
read_data.txt
単独でロックするため、curl
ファイルを開くことができません。この場合、他のプログラムで簡単にテストしてcat
コンテンツを消費したりダンプしたりできます。tail
- ファイルが
read_data.txt
より多くのデータを取得してコンテンツを追加するときにファイルが完了するのを待たない理由は理解できません。公開されたデータは不完全なため、PHPプログラムはそのデータをjsonに変換できません。 PHP側で入力を確認してください。
1つの可能な解決策は、read_data.txt
たとえば、read_data.x4GwkQ.txt
タスクの完了時に特にロックされていない場合O_EXCL
(開いている機能)。
または外部ロックファイルにバインドしますflock
。 セマフォ/ロックとして使用できるUnixコマンドは何ですか?