【问题标题】:PHP Passing $_FILES and $_POST as parameters to functionPHP 将 $_FILES 和 $_POST 作为参数传递给函数
【发布时间】:2012-05-31 02:30:06
【问题描述】:

我在网上搜索了一个使用 ajax 进行 PHP 图片上传的代码。我在下面找到了代码。问题是我改变了一些东西(微小的调整)以使其在我的服务器上工作。最初它只是一个处理从表单发布的数据的 php 页面(不是类或函数)。我把它变成了课堂然后发挥作用。我现在正在关注 OOP。我认为在从过程到 OOP 的转换中做事的最好方法是将 $_FILES 和 $_POST 传递给一个方法并在内部处理它们。我认为这行不通。看看这个例子,请就如何前进提出建议。

function uploadImageChosen($_FILES, $_POST){
            $path = "../uploads/images/";
            $valid_formats = array("jpg", "png", "gif", "bmp");
            $connectionInstance = new ConnectionClass();
            $connectionInstance->connectToDatabase();
            $imgName;
            $imgURL;
            $imgSize;
            $imgDir = $_POST['directory'];
            if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST")
            {
                $name = $_FILES['photoimg']['name'];
                $imgSize = $_FILES['photoimg']['size'];
                if(strlen($name))
                {
                    list($txt, $ext) = explode(".", $name);
                    if(in_array($ext,$valid_formats))
                    {
                        if($size<(1024*1024))
                        {
                            $imgName = time().substr(str_replace(" ", "_", $txt), 5).".".$ext;
                            $tmp = $_FILES['photoimg']['tmp_name'];
                            if(move_uploaded_file($tmp, $path.$imgName))
                            {
                                $imgURL = $path.$imgName;
                                $connectionInstance->query("INSERT INTO imagesupload(id, title, url, size, directory) VALUES (null, '$imgName','$imgURL', '$imgSize', '$imgDir')");
                                //echo "<img src='uploads/".$imgName."'  class='preview'>";
                            }
                            else{
                                echo "failed";
                            }
                        }else{
                            echo "Image file size max 1 MB";                    
                        }
                    }else{
                        echo "Invalid file format..";   
                    }
            }else{
                echo "Please select image..!";
            }           

          }//end of if      

        }//end of function

至于调用类函数的页面,这里是:

<?php
    require_once("../classes/UploadImages.php");
    $uploadInstance = new UploadImages();
    $uploadInstance->uploadImageChosen($_FILES, $_POST);
    //header("LOCATION:portfolio.php");
?>

非常感谢:)

【问题讨论】:

  • 预期行为是什么,实际行为是什么?
  • 图片移动到目录upload/images和db中存储的img数据
  • 这是预期行为还是实际行为?
  • 我下载的脚本是正确的。而且我没有改变逻辑而不是存储位置。所以我猜是真的
  • 您没有提供太多信息,您是否遇到任何错误?文件没有保存吗?数据没有存到db吗?

标签: php file upload


【解决方案1】:

尝试从 IF 语句中删除 $_SERVER['REQUEST_METHOD'] == "POST",看看它的作用。

【讨论】:

    【解决方案2】:

    $_POST$_FILES 是超全局数组,它们始终可用,在函数或方法中重新定义它们是个坏主意。

    你可以这样做:

    $uploadInstance->uploadImageChosen();
    

    ..

    function uploadImageChosen(){
               $path = "../uploads/images/";
               $valid_formats = array("jpg", "png", "gif", "bmp");
    ...
    $name = $_FILES['photoimg']['name'];
    ...
    

    或者,如果您需要本地范围内的副本,请这样做:

    $uploadInstance->uploadImageChosen($_FILES, $_POST);
    

    ..

    function uploadImageChosen($files, $post){
                   $path = "../uploads/images/";
                   $valid_formats = array("jpg", "png", "gif", "bmp");
    ...
    $name = $files['photoimg']['name'];
    ...
    

    【讨论】:

    • 即使类函数的调用位于与表单提交到的页面不同的文件中,这是否有效?
    • 是的。超全局阵列随处可用。调用带有参数的函数,第二个选项,不依赖于函数定义的位置。
    • 我遇到了问题。我还没有进行您的编辑,但解决方案不同。无论如何谢谢:)
    【解决方案3】:

    上面的脚本有一个在错误日志中没有检测到的问题。当我实例化连接类时,首先出现了这个问题。我应该创建另一个变量来接收打开连接以进行查询工作已解决并且数据现在存在于数据库中。第二个问题是 JPG 格式不在可接受的类型数组中,因此我将其与 jpg(变体)一起添加。这使得文件实际上传输到上传文件夹。感谢大家的支持,给您带来的不便敬请见谅:)

    【讨论】:

      猜你喜欢
      • 2013-01-27
      • 2021-04-13
      • 1970-01-01
      • 2012-11-17
      • 2020-07-22
      • 2014-12-08
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      相关资源
      最近更新 更多