【问题标题】:Is there a way to run some script before the upload starts in php?有没有办法在 php 开始上传之前运行一些脚本?
【发布时间】:2010-03-25 05:45:26
【问题描述】:

你可以在 php 开始上传文件之前运行一些脚本吗?例如,我发布到upload.php,在该文件中,我想先检查他们的$_SESSION,然后再开始浪费带宽并将文件统计信息上传到我的服务器。我在 nginx 上使用 php 5.2.11。

<?php
  if ($_SESSION['admin'] == 'YES') {
    // do upload here
  } else {
    exit;
  }
?>

【问题讨论】:

    标签: php nginx


    【解决方案1】:

    没有。在文件上传之前,请求不会到达 PHP 引擎。

    【讨论】:

    • 根本原因是上传只是请求正文部分中的一大块编码数据。在 PHP 级别,您无法阻止客户端使用正文中的数据向任意位置发出 POST 请求。在服务器级别,这在技术上是可行的(如果在标头中找不到有效的会话 ID,则关闭连接),但我认为除非您编写自定义模块等,否则无法在此级别配置 Web 服务器。在 nginx 中,您可以设置 client_max_body_size 限制,仅此而已。
    【解决方案2】:

    不,因为上传是请求的一部分,并且在 PHP 发挥作用之前就完成了。

    可能使用那些基于 PHP-/Perl 的上传器的技术来解决这个问题,这些上传器以某种方式连接到上传过程,但也可能没有。尤其是当您使用不同的网络服务器时。

    我将对正确的会话进行基于 Ajax 的快速检查,并将其绑定到您上传文件的表单的 submit 事件。这可能需要半秒钟,但对用户来说完全不显眼。

    【讨论】:

    • @COl。弹片我猜他想确保会话没有过期。
    【解决方案3】:

    您可以在表单提交的页面上进行 ajax 调用,以在允许表单提交之前检查其会话状态。

    【讨论】:

    • 这不是答案。不能使用 Ajax,因为它与常规形式相同,可以轻松避免
    • +1 - 对于所提出的问题,这是最接近有效解决方案的方法,尽管使用 onsubmit 方法中的异步调用有点愚蠢。
    • 我能想到。这样好多了
    • 为避免不必要的参数:您不能仅使用 php,文件上传之前检查会话变量。执行 OP 要求的唯一可能方法是将 ajax 请求绑定到 onSubmit。 90% 的用户不会修改表单来绕过 ajax 调用。如果他们这样做,他们的会话正在检查upload.php。只是说。
    猜你喜欢
    • 2022-01-10
    • 2011-06-02
    • 2022-11-03
    • 2019-12-31
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    相关资源
    最近更新 更多