我在画布和图像上使用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的情况。
如何同步服务器和浏览器? 谢谢。
答案 0 :(得分:0)
如果一个进程写入文件并在操作过程中另一个进程删除它会发生什么?
使用.lock
个文件,因此只有1个进程会尝试操作相关文件。