【发布时间】:2016-03-09 01:54:07
【问题描述】:
我一直在阅读 OOP PHP 的旧教程,但我碰壁了 这是我所处的环境:
- Windows 上的 WAMP(Apache)
- PHP 5.3.8
我最近一直在尝试使用类调试与文件上传(图像)相关的部分。
我的问题始于我使用全局变量 $_FILES(file) 作为参数并将其传递给方法的地方。
依次处理(测试)图像文件(步骤 1)然后上传(步骤 2)。
我发现图像的全局变量分配被完全“跳过”,即使 var_dump 显示错误代码为 0 的图像数组信息(即没有错误)
数组
- 'name' => 字符串'Westgantry.jpg'(长度=14)
- 'type' => 字符串'image/jpeg'(长度=10)
- 'tmp_name' => 字符串'C:\wamp\tmp\php298.tmp'(长度=22)
- '错误' => int 0
- '大小' => int 455568
上传页面表单基本上是获取帖子数据并将其提供给初始化的照片类 - 上传表单如下所示:
<?php
require_once("../../includes/initialize.php");
//if session is not logged in redirect to the login page
if(!$session->is_logged_in())
{ redirect_to("login.php"); }
?>
<?php
$max_file_size = 1048576;
$message = "";
if(isset($_POST['submit']))
{
$photo = new photograph();
$photo->caption = ($_POST['caption']);
$photo->attach_file =($_FILES['file_upload']);
if($photo->save())
{
//Success
$message ="Photograph uploaded successfully";
}
else
{
//Failure
var_dump($_FILES['file_upload']);
$message = join("<br/>", $photo->errors);
var_dump($photo->debugMsg);
}
}
?>
<?php include_layout_template('admin_header.php');?>
<h2> Photo Upload </h2>
<?php echo output_message($message); ?>
<form action ="photo_upload.php" enctype = "multipart/form-data" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $max_file_size; ?>" />
<p><input type = "file" name= "file_upload"/></p>
<p> Caption: <input type="text" name="caption" value=""/></p>
<input type = "submit" name = "submit" value = "Upload"/>
</form>
<?php include_layout_template('admin_footer.php'); ?>
photo 类中执行第一个测试(步骤 1)的方法如下所示:
<?php
public function attach_file($file)
{
$this->debugMsg = "Attach executing "; //Debug Test 1
// Perform error checking on the form parameters
if(!$file || empty($file) || !is_array($file))
{
// error: nothing uploaded or wrong argument usage
$this->errors[] = "No file was uploaded.";
return false;
}
elseif($file['error'] != 0)
{
// error: Display why attach failed
$this->errors[] = $this->upload_errors[$file['error']];
return false;
}
else
{
// Set object attributes to the form parameters.
$this->temp_path = $file['tmp_name'];
$this->filename = basename($file['name']);
$this->type = $file['type'];
$this->size = $file['size'];
}
}
?>
显然,在它能够进行任何排序变量赋值之前,它会在第一个 if 条件下跳闸。 我已经检查了 php.ini 的标准清单,以确保它不是下面列出的配置问题:
- 文件上传 = 开启
- upload_tmp_dir = "c:\wamp\www\tmp"
- post_max_size = 8M
- upload_max_filesize = 2M *我使用的文件小于此限制
- max_execution_time = 30 秒
- max_input_time = -1
- memory_limit = 128M
除此之外,我还将所有相关文件夹设置为所有人,即 777(即使 Apache 无论如何都具有完全访问权限) powershell 中的 ACL 确认尽可能多,以确保它不是读/写问题。
但仍然“没有骰子”。
这很奇怪,因为我编写的所有其他独立上传页面文件都可以正常工作 - 图像几乎立即加载。只有当我尝试以这种方式编码时 它使用图像数组数据(即 NULL、空或消失)提取“Dynamo”。
有趣的是,tmp 文件夹显示了会话文件的片段,所以至少我知道代码正在尝试 尝试加载文件。
如果有人能准确地告诉我 $_FILES 的 POST['submit'] 和类方法之间发生了什么,以及为什么文件参数被拒绝 那太好了。
提前感谢GF
【问题讨论】: