我们有一个PHP项目,在这个项目中,用户上传一个文件,软件开始对该文件进行加密。
这个过程需要大约5-7分钟的加密时间.
但是当加密过程进行时,在另一个用户之间上传该文件。然后我们的过程停止并再次启动该过程。
为了克服这一问题,我们还制作了一个处理表,其中新文件的文件路径以FIFO方式存储,但在添加新文件时,进程将再次启动。
该如何做才能使进程不停止,并且文件应该等待轮到它呢?
$sql="SELECT * FROM tbl_process";
$result = mysqli_query($con,$sql);
$countforh = mysqli_num_rows($result);
for($h = 1; $h<=$countforh; $h++)
{
$sql="SELECT * FROM tbl_process WHERE (sr_no = '".$h."' AND com_status = '0')";
//Con_status = 0 is for the file which is not encrypted.
$result = mysqli_query($con,$sql);
$row = mysqli_fetch_array($result);
if (is_null($row['pfile_path']))
{
continue; //if Con_status = 1
}
$sql="SELECT * FROM tbl_process WHERE (sr_no = '".$h."' AND com_status = '0')";
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($result))
{
$_SESSION['filepath'] = $row['pfile_path'];
$_SESSION['upload_tbl_sr'] = $row['upload_sr_no'];
}现在我们开始加密过程。
发布于 2016-11-29 05:56:14
您可以使用会话或序列化文件标记或上载该文件。
一旦PHP将文件导入系统,您就可以开始记录文件或会话
//File serialized, to First file
if($_FILES['file']['error'] != 0){ //Checks for error while importing file
if (!file_exists($tmpF)) {
$count = 1;
$queue[] = ['id'=>$count,'nameFile'=>$_FILES['file']['name'],'status'=>0];
$tmpF = sys_get_temp_dir().'/reportUpload.txt';
$tmp = fopen($tmpF,'w');
fwrite($tmp, serialize($queue));
fclose($tmp);
}else{
//For the second file on.
$tmpF = sys_get_temp_dir().'/reportUpload.txt';
$file = fopen($tmpF,'r');
$queue = unserialize(fgets($file));
fclose($file);
$last = count($queue);
$count = $queue[$last]['id']+1;
$queue[] = ['id'=>$count,'nameFile'=>$_FILES['file']['name'],'status'=>0];
$tmp = fopen($tmpF,'w');
fwrite($tmp, serialize($queue));
fclose($tmp);
}
}
//Starting Encryption
$tmpU = sys_get_temp_dir().'/reportUploadExecution.txt';
if(!file_exists($tmpU)){
$tmpF = sys_get_temp_dir().'/reportUpload.txt';
$file = fopen($tmpF,'r');
$queue = unserialize(fgets($file));
$line = 0;
while(!feof($queue)){
if($queue[$line]['status']==FALSE){
//Starting Encryption
$tmpU = sys_get_temp_dir().'/reportUploadExecution.txt';
$execution = ['id'=>$line,'nameFile'=>$queue[$line]['nameFile']]
$tmp1 = fopen($tmpU,'w');
fwrite($tmp1, serialize($execution));
fclose($tmp1);
// Your code here
// If encryption ended successfully set line "Status" = 1
unlink($tmpU);
$line++;
}
}
fclose($file);
}这只是一个想法,如果您可以发布部分代码,它将更好地帮助您。
https://stackoverflow.com/questions/40858445
复制相似问题