在下一页中,$ _FILES [“myfile”] [“tmp_name”] = NULL

时间:2011-04-04 15:47:46

标签: php html

我上传了POST的文件,它似乎工作正常,但在我转到下一页后,我无法使用该文件与全局变量中的位置:$ _FILES [“myfile”] [“tmp_name” ] 因为它是空的。我不知道为什么,我之前使用过这段代码而且工作得很好......

以下是代码:

WWW / step1.php

if (isset($_POST["check_if_press"]) && $_POST["check_if_press"] == "Upload") 

{

if (!empty($_FILES["myfile"]["tmp_name"])) 

{

  header("Location: ./step2_1.php");

  }else     echo "Please select a file";

}

<form action="<?php echo $PHP_SELF; ?>" method="post" enctype="multipart/form-data">

 Upload file: <input type='file' name='myfile' /><br />

 <input type='Submit' name='check_if_press' value='Upload'  />

</form>

WWW / step2_1.php

echo  $_FILES["myfile"]["tmp_name"];

现在我在屏幕上打印出NULL。

当我使用没有参数的POST时:

action="<?php echo $PHP_SELF

但是:

action="./step2.php"

相反,它有效,但我无法使用上传检查。

谢谢,

Yonatan。

2 个答案:

答案 0 :(得分:3)

该文件仅出现在帖子范围内的$_FILES中。这里发生的事情是:

  1. 用户正在将文件发布到step1
  2. step1正在对文件执行某些操作,然后告诉用户转到step2(通过位置标头)
  3. 响应位置标头,用户正在向step2发出GET请求,未发布任何已发布的文件
  4. 您需要将文件直接发布到step2(您说工作,只是没有step1的逻辑)并将您的服务器端文件检查逻辑在那里,或者在step1中将文件存储在服务器上的某个位置(将其保存到文件系统,将其存储在数据库中,可能将其存储在我不建议的会话中,等等)。由step2访问。

    step2是来自step1的完全独立的请求,无法访问step1范围内的任何内容。

答案 1 :(得分:0)

临时文件会在您的帖子脚本末尾删除,因此您需要在重定向之前将其复制到其他位置:

if (!empty($_FILES["myfile"]["tmp_name"])) 

{
  //COPY THE FILE TO ANOTHER LOCATION HERE...

  header("Location: ./step2_1.php");

  }else     echo "Please select a file";

}