2

クラス内のメソッドを使用して、画像ファイルをデータベースにアップロードしようとしています。関数のように機能するはずです。

私は2つのphpファイルを持っています。1つ目は、画像を受け取り、メソッドを呼び出すファイルです。

<?php
if (!empty($_FILES)){
    require_once('masterclass.php');

    $galeria = $_POST['gal'];
    $fecha = $_POST['fecha'];
    $titulo = $_FILES['Filedata']['name'];
    $imagen = $_FILES['Filedata']['tmp_name'];

    $mc = new masterclass;
    $mc->saveImage($galeria, $fecha, $titulo, $imagen, 800, 600, 80);
}
?>

2つ目は、その仕事をする必要があるメソッドです。

public function saveImage($galeria, $fecha, $titulo, $tmpImagen, $maxWidth, $maxHeight, $quality){
    if( isset($galeria, $fecha, $titulo, $tmpImagen, $maxWidth, $maxHeight, $quality) ){
        $ms->dbc(true); // connect to database

        $fecha = $this->formatFecha($fecha); // format date string

        $origen = imagecreatefromjpeg($tmpImagen);
        $x = imagesx($origen);
        $y = imagesy($origen);

        if( $x > $maxWidth ){
            $nx = $maxWidth;
            $ny = $y*$nx/$x;
        }
        if( $y > $maxHeight ){
            $ny = $maxHeight;
            $nx = $x*$ny/$y;
        }
        else{
            $nx = $x;
            $ny = $y;
        }

        $destino = imagecreatetruecolor($nx,$ny);
        imagecopyresized($destino,$origen,0,0,0,0,$nx,$ny,$x,$y);
        imagejpeg($destino, $tmpImagen, $quality);
        $imagen = addslashes(fread(fopen($tmpImagen, "rb"), filesize($tmpImagen)));

        $peticion = "insert into galeria_fotos (galeria, fecha, titulo, imagen) values ('$galeria', '$fecha', '$titulo', '$imagen')";
        mysql_query($peticion) or die($this->isError(2));

        $ms->dbc(false); // disconnect from database
     }
     else{
        die($this->isError(2));
    }
}

最初のphpファイルでメソッドのジョブを直接実行すると、機能します。しかし、クラスからsaveImage()を使用する場合はそうではありません。私は昨年からJavaScriptだけで作業していて、PHPでは寒いです。

スペイン語の変数名で申し訳ありませんが、それは完全に理解できると思います。

$_FILES追加情報として、メソッドを呼び出すときに配列を直接送信しようとしましたが、結果は得られなかったと言えます。

あなたが私を助けてくれることを願っています。皆さん、ありがとうございました。よろしく:)

4

1 に答える 1

0

私はあなたの問題を再現しようとしました。しかし、できませんでした。私は自分の世界にいくつかの変更を加えましたが、あなたが投稿したすべてをカバーすると信じていました。

私の例に従ってください:

index.php

<html>
<head></head>
<body>
    <form action="upload.php" enctype="multipart/form-data" method=post>
        <input type="file" id="f_up" name="f_up">
        <input type="submit" value=go>
    </form>
</body>
</html>

upload.php

<?php
require_once('masterclass.php');
if (!empty($_FILES)){
    require_once('masterclass.php');

    $galeria = $_POST['gal'];
    $fecha = $_POST['fecha'];
    $titulo = $_FILES['f_up']['name'];
    $imagen = $_FILES['f_up']['tmp_name'];

    $mc = new masterclass;
    $mc->saveImage($imagen, 800, 600, 80);
}

masterclass.php

<?php
class masterclass{
    public function saveImage($tmpImagen, $maxWidth, $maxHeight, $quality){
        $db = mysql_connect('127.0.0.1','root') or die('could not connect');
        mysql_select_db('examples',$db);
        $origen = imagecreatefromjpeg($tmpImagen);
        if( isset($tmpImagen, $maxWidth, $maxHeight, $quality) ){

            //$fecha = $this->formatFecha($fecha); // format date string

            $origen = imagecreatefromjpeg($tmpImagen);
            $x = imagesx($origen);
            $y = imagesy($origen);

            if( $x > $maxWidth ){
                $nx = $maxWidth;
                $ny = $y*$nx/$x;
            }
            if( $y > $maxHeight ){
                $ny = $maxHeight;
                $nx = $x*$ny/$y;
            }
            else{
                $nx = $x;
                $ny = $y;
            }

            $destino = imagecreatetruecolor($nx,$ny);
            imagecopyresized($destino,$origen,0,0,0,0,$nx,$ny,$x,$y);
            imagejpeg($destino, $tmpImagen, $quality);
            $imagen = addslashes(fread(fopen($tmpImagen, "rb"), filesize($tmpImagen)));

            $peticion = "insert into upload_image (image) values ('$imagen')";
            mysql_query($peticion,$db) or die('error');


        }
        else{
            die($this->isError(2));
        }
    }
}

このコードは、mysql5.5.27およびPHP5.3.15で正常に機能します。あなたの環境についてもう少し教えてください。

于 2013-04-19T03:14:18.533 に答える