0

キャンバスと画像に JS を使って少し試してみました。最後の部分では、最初にサーバーに最終イメージを書き込もうとするページを呼び出します。

このプロセスは、完全ではなく、以前のファイルが存在することを前提としています。

<?php
$filename = explode(".", $_POST["trans_file"]); // name of the image file
if (!unlink("transit/" . $_POST["trans_file"])) echo "File " . $_POST["trans_file"] . "not found!<br />";       // remove the partial file
$filesave = $filename[0] . ".png";              // I will save a PNG file
$filejpg = $filename[0] . ".jpg";               // but I will transform it into JPG
$data = $_POST["base64img_data"];               // here I receive the base64 image by a previous process
$data = explode(";", $data);                    // I remove the first part of it
$data = explode(",", $data[1]);                 // $data[1] now contains the base64 image complete
$image=base64_decode(chunk_split($data[1]));    // $image is now a PNG file
$handle = fopen("transit/$filesave", "wb");     // Create a PNG file
fwrite($handle, $image);                        // write it
fclose($handle);                                // Close, and transform it into JPG
    png2jpg("transit/$filesave", "transit/$filejpg", 100);
    unlink("transit/$filesave");                // remove PNG image

これをページの先頭に配置しましたが、ブラウザーには常に前のファイルが表示されます。これは、最初にキャンセルされたもので、それ自体が JPG です。

(私にとっては)奇妙なことに、このシーケンスはあるサーバーでは完全に機能していますが、別のサーバーでは機能していません!

ページ内での PHP と JS の非同期実行の場合ではないかと思います。

サーバーとブラウザを同期するにはどうすればよいですか? ありがとうございました。

4

1 に答える 1

0

あるプロセスがファイルに書き込み、操作の途中で別のプロセスがそのファイルを削除するとどうなりますか?

ファイルを使用.lockして、1 つのプロセスだけが問題のファイルを操作しようとするようにします。

于 2013-03-05T15:13:31.070 に答える