【问题标题】:PHP OOP File upload failure $_FILES not assigning to object/method variablesPHP OOP 文件上传失败 $_FILES 未分配给对象/方法变量
【发布时间】: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

【问题讨论】:

    标签: php arrays oop


    【解决方案1】:

    根据您的 sn-ps,您使用 $photo-&gt;attach_file() 作为属性而不是函数。

    更改以下内容:

    $photo->attach_file =($_FILES['file_upload']);
    

    $photo->attach_file($_FILES['file_upload']);
    

    ...删除=

    如果 $photo-&gt;caption 也是一个函数,你需要对它做同样的事情。

    【讨论】:

    • 好的,我已经尝试删除赋值运算符(=),但仍然没有上传结果。 .不过有趣的想法 - 为这个特定的代码行尝试一些组合(nb :Caption 没有方法)
    猜你喜欢
    • 1970-01-01
    • 2018-01-26
    • 2012-07-13
    • 2021-12-03
    • 2011-12-20
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 2016-05-12
    相关资源
    最近更新 更多