PHP- 等到值存储在 mySQL

PHP- Wait until a value is stored in mySQL

我有一个 PHP 运行 将文件上传到我的服务器,然后我用另一个脚本对该文件进行一些计算,并将一些数据(计算结果)上传到 mySQL。 在那之后,我从 mySQL 中读取了这个数据(计算结果)在我用来将文件上传到服务器的同一个 PHP 中。 问题是我不知道在我的服务器上处理这个文件需要多长时间,可能需要 5 秒或 2 分钟,所以现在我正在使用 sleep(40),因为大多数文件的处理时间更短(但不是全部...)以确保我在 mySQL 中寻找的值将在那里,但这不是应该完成的方式。 有什么方法可以让程序等到我正在寻找的值(用我刚刚上传的文件进行的计算结果)存储在 mySQL 中? 不断检查值是否存在以及何时存在的东西会继续 运行 程序? 我认为 PHP 可能无法实现,我可能需要 javascript。 这是我的代码:

$uploaddir = '/opt/lampp/htdocs/stl';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
$link = mysql_connect("whatever", "whatever...", "whatever...whatever");
$nombre=basename($_FILES['userfile']['name']);
$tamany=basename($_FILES['userfile']['size']);
$sql="INSERT INTO `wordpress`.`uploads` (`autoinc`, `nombre`, `tamany`, `fecha` , `cantidad`) VALUES (NULL, '$nombre', '$tamany', CURRENT_TIMESTAMP , '$cantidad')";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    mysql_select_db('wordpress');
    mysql_query($sql);
    rename ( $uploadfile,$uploaddir."/".mysql_insert_id().".stl");
    $uploadfile_we=basename($uploadfile,".stl");
    $numero=mysql_insert_id();
    echo '<pre>';
    sleep(40);
    $sqls= "SELECT `cond` FROM `cm` WHERE `id`='$numero'";
    $result = mysql_query($sqls);
    $row = mysql_fetch_assoc($result);
    $condicion = $row['cond'];
}

如您所见,上传了一个文件,然后我查看了数据库。我怎么知道数据库是否已经更新?

这可能会让您朝着正确的方向开始:http://php.net/manual/en/session.upload-progress.php

根据评论进行编辑:我能做到的唯一方法是使用 JavaScript (Get file size before uploading) 获取文件大小,然后让 PHP 将该大小与 $ 进行比较_FILES['filename']['size'].

Mysql 将在成功插入语句后 return 为真。因此,请检查该值是否为真并执行其余代码。

你不需要这个。 cm table 未更新。插入查询不影响存储在这个 table 中的值,您可以随时从它 select 中获取数据,数据将是相同的。

看完您的评论后,我不明白您为什么要同时 运行 两个不同的 PHP 脚本?我猜你是通过 ajax 呼叫他们的吧?但你为什么要这样做?只需include/require move_uploaded_file returns 之后的进程脚本,更新tables,然后使用数据。您保存一个查询,不需要 select 您刚刚更新的内容。

无需编写代码,您就可以使用数据库来同步您的进程。

  1. 上传后在数据库中放置一行。这将(可用于)为新文件生成一个 ID 值。

  2. 处理文件,更新文件记录(由 ID 标识)上的标志,指示处理完成。

  3. 在原始代码中,有一个循环会等待一小段时间,也许是一秒钟,然后再检查数据库状态。文件处理完毕或时间过长后,采取适当的措施。

还有其他方法可以在进程之间来回传递信息,但您似乎已经在数据库中执行与正在上传的文件相关的操作。