私は、音楽イベント中にライブ画像を撮影する写真家向けの小さなアプリを作成しました。php cronを使って画像ファイルftpが完成したかどうかをチェックする方法
画像はニコンのカメラから私のftpサーバに送られます。
アプリチェック(クーロン)が指定されたフォルダ内の天気を新しい画像が「開発」フォルダにコピーし、それらを次に
あり、ImageMagickの(リサイズ、フィルタリング及び透かし)でそれらを処理
その後、それらを「送信」フォルダに移動し、指定された受信者に送信される電子メールに添付します。
問題:画像を処理する前に画像が完全にアップロードされているかどうかを確認できます。 cronは5分ごとに実行され、写真家はコンサート中に連続して撮影します。
私はここで同様の質問をしていますが、解決策は実際には見つかりませんでした。だから、重複した質問の場合は、私はそれをお詫び申し上げます。
おかげで、S @ chをする@ X
UPDATE#1 - ここで私はマーク・Setchellの提案を行ったテストです:
`exec("convert -regard-warnings -size 1280x44.879451 xc:none -gravity center -pointsize 24 -font 'Times-Bold' -stroke black -strokewidth 1 -annotate 0 '©M.Setchell' -background none -shadow 100x3+0+0 +repage -stroke none -fill white -annotate 0 '©M.Setchell' roll/SUBSONICA.JPG +swap -gravity south -geometry +0-3 -composite send/SUBSONICA.JPG && rm roll/SUBSONICA.JPG");`
と
`exec("convert -size 1280x44.879451 xc:none -gravity center -pointsize 24 -font 'Times-Bold' -stroke black -strokewidth 1 -annotate 0 '©M.Setchell' -background none -shadow 100x3+0+0 +repage -stroke none -fill white -annotate 0 '©M.Setchell' roll/SUBSONICA.JPG -regard-warnings +swap -gravity south -geometry +0-3 -composite send/SUBSONICA.JPG && rm roll/SUBSONICA.JPG");`
後VARSが来るにはPHPから:
-size 1280x44.879451
($imageSize = getimagesize($developDir . $developFile);
)
-annotate 0 '©M.Setchell'
($watermark
)
roll/SUBSONICA.JPG
(入力ファイル:$developDir . $developFile
foreach
文の)
send/SUBSONICA.JPG
(出力ファイル:foreach
文の$sendDir . $developFile
)
テストでは、FTP経由で手動で画像のアップロード中に、私が得ましたメールは8つの添付ファイルが必要です。そのうちの4つはまだ部分画像です。
UPDATE#2 - 以下@マークSetchellの更新のように - 私はexec
関数で出力し、実行したコマンドの戻りステータスのVARの配列を追加しました。
その後、簡単なif ... else
文で、私は簡単に結果を分析することができます:
- 場合(リターン・ステータス== )の画像ファイルが有効でないと1を完了したので、我々は削除
- else(返信ステータス== )のファイルは、&という完全な画像ファイルです:私たちは、写真家が送信するftpフォルダからファイルを削除します。 Nikonカメラからの画像(私のアプリの "ロール"フォルダ)。
ので、@マークSetchellの回答に基づいて正確かつ完全exec
文字列は、次のとおりです。
exec("convert $im_cmd", $convert_output, $returned_var);
if ($returned_var) {
unlink($send_dir . "/" . $developFile);
} else {
unlink($develop_dir . "/" . $developFile);
}
をこのソリューションは完璧に動作します:
`convert -regard-warnings -size 1024x40 xc:none -gravity center -pointsize 20 -font 'Times-Bold' -stroke black -strokewidth 1 -annotate 0 '©2016 Mark Setchell' -background none -shadow 100x3+0+0 +repage -stroke none -fill white -annotate 0 '©2016 Mark Setchell' roll/SUBSONICA_small.jpg +swap -gravity south -geometry +0-3 -composite send/SUBSONICA_small.jpg`
ここで完全に働いたコードスニペットです10回のテストの後では、超信頼性が証明されました。最初の質問として、ファイルをチェックする代わりに@Mark Setchellのアプローチ - Imagemagickコンバージョンの-regard-warnings
オプションの使用ertプログラムlink - 問題を解決しました。
PHPはないかもしれませんこの場合、最善のアプローチになります。すべての画像がアップロードされるまで待機する必要がありますか?写真家がこれ以上写真を撮らないことを決定したという考えはどのようにサーバーにありますか?または、個々のファイルを処理する前に完全にアップロードされていることを確認したいだけですか? –
NikonからFTPサーバーにInagesを転送するソフトウェアは何ですか?それがあなたのコントロール下にあるならば、画像を 'xyz.upload'として起動し、完了したら' xyz'と名前を変更することができます。サーバ上では '.upload'で終わるファイルは無視します。 –
@Lotharyx個々のファイルを処理する前に完全にアップロードされていることを確認したいだけです。スクリプトは5分ごとにcronジョブとして実行されます。実行するたびに、 "camera_roll"ディレクトリをチェックして、処理するイメージがあるかどうかを確認します。イメージを見つけた場合は、イメージを別のディレクトリに渡して処理します。したがって、それは継続的に実行されます。コンサート中、写真家が撮影して最高の画像をサーバーに送ると、そのプロセスはその仕事をします。しかし、私は移動しているファイルがまだ転送されているかどうかを知る必要があります。 – sachax