4

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");
?>

どうもありがとうございます :)

4

3 に答える 3

6

$_POST and $_FILES are superglobal arrays, they are always available, and redefining them in a function or method is a bad idea.

You can do something like this:

$uploadInstance->uploadImageChosen();

..

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

Or if you need copies in the local scope do it like this:

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

..

function uploadImageChosen($files, $post){
               $path = "../uploads/images/";
               $valid_formats = array("jpg", "png", "gif", "bmp");
...
$name = $files['photoimg']['name'];
...
于 2012-05-24T13:51:18.557 に答える
0

$_SERVER['REQUEST_METHOD'] == "POST"IF ステートメントから削除してみて、その動作を確認してください。

于 2012-05-24T13:41:51.400 に答える
0

上記のスクリプトには、エラー ログで検出されなかった問題があります。この問題は、接続クラスをインスタンス化したときに最初に発生しました。クエリを実行するための開いている接続を受け取る別の変数を作成する必要がありましたが、これは解決され、DB にデータが存在するようになりました。2 つ目の問題は、JPG 形式が許容可能な型の配列に含まれていなかったため、jpg (バリエーション) と共に追加したことです。これにより、ファイルが実際にアップロードフォルダーに転送されました。サポートしてくれてありがとう、そしてご不便をおかけして申し訳ありません:)

于 2012-05-24T14:17:29.940 に答える