【问题标题】:Upload something a running file in php在php中上传一些正在运行的文件
【发布时间】:2016-05-06 20:18:30
【问题描述】:

我知道这听起来很奇怪。我的服务器上有一个 php 文件,负责处理上传。我桌面上的一个 java 程序将文件发送到这个 php 文件。我想随时取消文件上传到服务器的过程。所以我想创建一种流或类似的东西来停止正在进行的上传过程。

我尝试使用 PID 来停止 php 文件的运行。但是在客户端完成上传之前,一个 php 文件并没有开始运行。

我想在上传开始前运行“savePid()”函数。所以我可以随时获取 PID 并停止运行文件。

<?php
include('func.php');
savePid(); //run this before upload started

$in = stream_get_contents(fopen("php://input", "rb"));
$out = fopen('pipeupload.txt', 'w');

while ( ! feof($in) ) {
    fwrite($out, fread($in, 8192));
}
?>

我知道这行不通。我只是在寻找一种解决方案来停止正在进行的上传过程。

【问题讨论】:

  • 我认为你不能停止从 PHP 上传。据我所知,PHP 会在上传完成后获取文件。真正的接收过程由您的网络服务器完成。
  • @bansi 我可以在服务器端选择另一个解决方案。我只需要停止上传过程。
  • 如果在java程序中取消java程序的上传,PHP只会收到部分上传。检查该错误并让脚本终止。
  • @CharlotteDunois 我知道我必须停止服务器上的进程。
  • 杀死一个网络服务器进程不是一个好主意,因为它可能导致比它解决的问题更多的问题。此外,这甚至可能不会停止上传本身。在客户端停止上传。

标签: java php upload


【解决方案1】:

可能在服务器端。

示例:

您有 20 张图片,每张图片的大小都超过 2 mb。你的爪哇 来自桌面的文件发送准备好的图像的 url 数组 如您所说,通过php文件上传。在 php 文件中你必须做一些 更改,在每次上传图片之前,您必须检查数据库 (创建表并添加新字段 image_cancel 或将此字段添加到您的 prev 表,设置默认值为 false) 列名 image_cancel 为 真假。如果为真,则停止执行并退出。现在新建一个 script cancel_image.php ---> 在里面写代码并设置 image_cancel 字段为真。

【讨论】:

  • 认为我只有一张图片,但它是 100 mb,我想在它完全发送到服务器之前取消上传。
  • 我能想到的唯一解决方案是将一个大文件分割成小块并一个接一个地发送,并在每个块发送后检查服务器是否仍然想要获取文件。
  • @charty :是的,对于大尺寸图像,您必须将图像分成小块,您也可以使用 javascript 来完成。我希望我的回答接近你的回答。
  • 你说我应该把图片的路径发送到服务器,php 会上传图片。 PHP如何上传只有路径信息的文件?根据您的回答,java程序将发送文件的路径而不是文件本身?或者我不明白:)
【解决方案2】:

这不是一件容易的事。

我能想到几个选项,但都不容易。首先更容易

第一种方法:
您应该有 2 个 PHP 脚本,一个用于处理上传(您现在拥有),另一个用于通知客户端中止。客户端应该像您现在一样上传到上传脚本,并定期检查通知脚本中是否发布了中止。一旦客户端发现 abort 它将中止上传的其余部分。因此,您的文件永远不会到达处理上传的 PHP 文件。此方法需要客户端处理中止。不遵守中止的客户端仍然可以上传完整文件。

第二种方法:
您应该编写自己的文件处理模块或应用程序,而不是普通的 Web 服务器。您还可以编写与文件上传挂钩的 apache 模块(如果您的 Web 服务器是 apache)。但是这种方法更复杂,如果您不托管它,它将无法在 Web 服务器上运行。这种方法需要修补网络服务器或安装在系统级别运行的应用程序,我认为任何管理员都不会允许在他们的服务器上这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 2022-01-11
    • 2012-05-26
    • 2020-08-25
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    相关资源
    最近更新 更多