首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在用户上传新文件后立即启动进程?

如何在用户上传新文件后立即启动进程?
EN

Stack Overflow用户
提问于 2016-11-29 05:31:08
回答 1查看 164关注 0票数 2

我们有一个PHP项目,在这个项目中,用户上传一个文件,软件开始对该文件进行加密。

这个过程需要大约5-7分钟的加密时间.

但是当加密过程进行时,在另一个用户之间上传该文件。然后我们的过程停止并再次启动该过程。

为了克服这一问题,我们还制作了一个处理表,其中新文件的文件路径以FIFO方式存储,但在添加新文件时,进程将再次启动。

该如何做才能使进程不停止,并且文件应该等待轮到它呢?

代码语言:javascript
复制
$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'];
}

现在我们开始加密过程。

EN

回答 1

Stack Overflow用户

发布于 2016-11-29 05:56:14

您可以使用会话或序列化文件标记或上载该文件。

一旦PHP将文件导入系统,您就可以开始记录文件或会话

代码语言:javascript
复制
//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);
}

这只是一个想法,如果您可以发布部分代码,它将更好地帮助您。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40858445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档