1

这是我第一次尝试创建一个函数,但我无法弄清楚...我正在尝试构建一个函数,该函数将上传图片并返回她的路径,但回显不显示任何内容并且我没有任何语法错误...我不太明白?

我希望你能比我看得更清楚。

函数.inc.php:

function upload_photo(
$photo_input_name, $photo_path, $photo_type1, $photo_type2, $photo_max_weight, $photo_max_height, $photo_max_width)
{

if (isset($_FILES[$photo_input_name]))
{

    //UPLOAD DE FICHIER
    if(!empty($_FILES[$photo_input_name]['tmp_name']))
    { //si n'est pas vide

        //spécification du chemin d'enregistrement
        $dossier = $photo_path;

        if (exif_imagetype($_FILES[$photo_input_name]['tmp_name']) != $photo_type1 AND exif_imagetype($_FILES[$photo_input_name]['tmp_name']) != $photo_type2)
        { //si le format de l'image est différent de jpg ou png                         
            $erreur = 'Oups, extension non reconnu. Les extensions autorisées sont '.$photo_type1.' '.$photo_type2.'.';
        }

        else 
        { //si l'image est un jpg ou png

            //on défini le poid max et on appel le poid de l'image uploader
            $max_weight = $photo_max_weight;
            $weight = filesize($_FILES[$photo_input_name]['tmp_name']);

            if ($weight > $max_weight)
            { // si le poid de l'image est supérieur au poid max autorisé                   
                unlink($_FILES[$photo_input_name]['tmp_name']); 
                $erreur = 'Oups, le fichier est trops volumineux, il ne doit pas depasser '.$photo_max_weight.' mo.';
            }

            else
            { // si le poid de l'image est inférieur ou egal on continue                    
                $max_height = $photo_max_height;
                $max_width = $photo_max_width;
                $photo_size = getimagesize($_FILES[$photo_input_name]['tmp_name']);

                if ($photo_size == FALSE)
                { // si les informations récuperer par la fonction getimagesize ne sont pas valide, 
                    // le fichier n'est pas une image, on le supprime et affiche une erreur
                    unlink($_FILES[$photo_input_name]['tmp_name']); 
                    $erreur = 'Oups, il semble que le fichier ne soit pas valide.';
                }

                if ($photo_size[1] != $max_height AND $photo_size[0] != $max_width)
                { // si les dimensions de l'image sont differentes de $photo_max_width/height, 
                 // on efface l'image uploader et on affiche une erreur
                    unlink($_FILES[$photo_input_name]['tmp_name']);
                    $erreur = 'Oups, il semble que l\'image ne soit pas au bon format ('.$max_width.' x '.$max_height.' px).';
                }

                if (!isset($erreur))
                { // si il n'y a aucune erreur on continue vers l'enregistrement

                    if (is_file($dossier.$_FILES[$photo_input_name]['name']))
                    {// si il y a un fichier du même nom dans le dossier on lui ajoute un prefix

                        $file_upload = rand (0, 15).'_'.$_FILES[$photo_input_name]['name'];

                        $fichier = $file_upload;
                    }

                    else $file_upload = $_FILES[$photo_input_name]['name'];

                    $fichier = $file_upload;

                    if(move_uploaded_file($_FILES[$photo_input_name]['tmp_name'], $dossier . $fichier)) 
                    { //si l'image est uploader
                        echo $dossier.$fichier;
                        return true;        
                    }
                }

                else 
                { //si l'upload echoue

                    $erreur = 'Oups, la copie de la photo sur le serveur a échoué';

                }

            }

        }

    }

}

}

以及我尝试使用我的功能的页面:

if (isset($_FILES)) 
{   
    include('function.inc.php');

    $photo_input_name = 'photo_buste_coeurG_'.$line;
    $photo_path = '../../images/uploaded/';
    $photo_type1 = 'IMAGETYPE_JPEG';
    $photo_type2 = 'IMAGETYPE_PNG';
    $photo_max_weight = 1048576;
    $photo_max_height = 480;
    $photo_max_width = 480;


    upload_photo($photo_input_name, $photo_path, $photo_type1, $photo_type2, $photo_max_weight, $photo_max_height, $photo_max_width);


}

感谢您的时间。

4

1 回答 1

1

问题就在这里

if ($photo_size[1] != $max_height AND $photo_size[0] != $max_width)

您只允许照片恰好 $max_height高且正好 $max_width宽。那些!=应该是>。此外,AND应该OR(或||,更常用的)

也是常量IMAGETYPE_JPEGIMAGETYPE_PNG你应该这样使用它们,而不是把那个值放在一个字符串中;它不起作用。

当我们在这里时,请允许我评论一下该功能是如何设置的。您的代码中存在一些结构性问题。

  • 您经常为变量分配其他变量的值,这非常令人困惑且不必要。
  • 你一直在做 if ... then ... else 这使得代码过于复杂。如果不是,则返回(或者,更好的是,抛出异常)。
  • 您将自己限制为两种照片类型。如果您想删除它们怎么办?如果您想添加一个怎么办?您需要检查所有代码并替换函数调用。相反,请使用数组,以便您可以提供任意数量的选项。

作为参考,这就是我编写函数的方式

// the function is called upload_photo, no need to prepend photo to each and every argument
function upload_photo($input_name, $path, array $types, $max_weight, $max_height, $max_width)
{
    if (empty($_FILES[$photo_input_name]['tmp_name']))
    {
        throw new Exception('No file uploaded');
    }

    $type = exif_imagetype($_FILES[$photo_input_name]['tmp_name']);
    if (!in_array($type, $types))
    { //si le format de l'image est différent de jpg ou png                         
        throw new Exception('Oups, extension non reconnu. Les extensions autorisées sont '.implode(',', $types).'.');
    }

    $weight = filesize($_FILES[$photo_input_name]['tmp_name']);
    if ($weight > $max_weight)
    { // si le poid de l'image est supérieur au poid max autorisé                   
        unlink($_FILES[$photo_input_name]['tmp_name']); 
        throw new Exception('Oups, le fichier est trops volumineux, il ne doit pas depasser '.($max_weight / 1024 / 1024).' mo.');
    }

    $photo_size = getimagesize($_FILES[$photo_input_name]['tmp_name']);
    if ($photo_size == FALSE)
    { // si les informations récuperer par la fonction getimagesize ne sont pas valide, 
        // le fichier n'est pas une image, on le supprime et affiche une erreur
        unlink($_FILES[$photo_input_name]['tmp_name']); 
        throw new Exception('Oups, il semble que le fichier ne soit pas valide.');
    }
    if ($photo_size[1] > $max_height || $photo_size[0] > $max_width)
    { // si les dimensions de l'image sont differentes de $photo_max_width/height, 
     // on efface l'image uploader et on affiche une erreur
        unlink($_FILES[$photo_input_name]['tmp_name']);
        throw new Exception('Oups, il semble que l\'image ne soit pas au bon format ('.$max_width.' x '.$max_height.' px).');
    }

    if (file_exists($path.$_FILES[$photo_input_name]['name']))
    {// si il y a un fichier du même nom dans le dossier on lui ajoute un prefix
        // FIXME: What if the renamed file also already exists? -- left as an exercise for the reader
        $fichier = rand (0, 15).'_'.$_FILES[$photo_input_name]['name'];
    }
    else
    {
        $fichier = $_FILES[$photo_input_name]['name'];
    }

    if(!move_uploaded_file($_FILES[$photo_input_name]['tmp_name'], $path . $fichier)) 
    { //cannot move file
        throw new Exception('Oups, la copie de la photo sur le serveur a échoué');        
    }

    return $dossier.$fichier;
}

然后这就是你所说的

if (isset($_FILES)) 
{   
    include('function.inc.php');

    $input_name = 'photo_buste_coeurG_'.$line;
    $path = '../../images/uploaded/';
    $types = array(IMAGETYPE_JPEG, IMAGETYPE_PNG);
    $max_weight = 1048576;
    $max_height = 480;
    $max_width = 480;

    try {
        upload_photo($input_name, $path, $types, $max_weight, $max_height, $max_width);
    } catch (Exception $e) {
        echo 'Erreur: '.$e->getMessage();
    }
}
于 2013-05-18T21:47:02.737 回答