1

我正在尝试实现这个 PHP & JQuery 上传器:http ://code.google.com/p/ax-jquery-multiuploader/

我没有更改任何内容,并使用了“表单集成和文件重命名”示例,因为我需要在表单中发送画廊名称来设置文件夹路径。上传工作正常,但一旦完成,我就会得到一个空白页面。我真的不明白为什么...

最奇怪的事情是:每次我尝试修改随包提供的 upload.php 文件以获取消息时,上传似乎不再起作用(进度条停止在大约 25% 处,没有任何事情发生,我留在同一页),但文件已上传。

我想获得一个包含上传图像列表的页面,用标题完成它们,然后在数据库中插入数据(图像路径、名称和标题)。

有谁明白会发生什么?

谢谢,

芦名

编辑:一些帮助... PHPinfo 和 PHP 页面。我试图同时包含 header.php 和 body.php ,因为我必须为我的所有页面做,但正如我解释的那样,它会导致最奇怪的事情。

服务器 PHPinfo:http ://awichser.dyndns.org/phpinfo.php

add_gallery.php

<!DOCTYPE html>
<html>
    <head>
        <title>As-Wichser.com - Website Management</title>
        <!--- Informations sur le site -->
        <meta name="robots" content="noindex, nofollow" />
        <meta name="author" content="Anne-Sophie Wichser"/>
        <meta name="description" content="Dessin artistique et photographie sportive (automobile et aviation) et de loisirs par Anne-Sophie Wichser."/>
        <meta name="description" content="Drawing and sport (cars and airplanes) and leisure photography by Anne-Sophie Wichser."/>
        <meta name="keywords" content="Anne-Sophie Wichser, anne-sophie wichser, Photos, photo, photos, Photo, Dessin, dessin, Drawing, drawing, 24 Heures du Mans, 24 Hours of Le Mans, Airplanes, airplanes, airplane, Airplane, Avions, avions, Avion, avion, Modélisme, modélisme, Model Kit, model kit, 24, heures, du mans, mans, Mans, 24 heures du mans, 24H,le mans, fia, alms, lmes, lms, autos, course, endurance, séries, series, peugeot 908 hdi fap, porsche, ferrari, audi, lola, courage, viper, saleen, panoz, riley, scott, reynard, lister, storm, wr, dome, bentley, tvr, spyker, lamborghini, maserati, modena, maranello, murcielago, sebring, spa, monza, silverstone, nurburgring, gt, sport, automobile, prototypes, protos, proto, aco, 911, 917, 993, 996, 550, 360, 575, gt2, gt3, gallardo, racing, bugatti, gts-r, daytona, 12 heures, petit le mans, plm, jaguar, aston martin, ford, GT 40, ickx, videos, accidents, vaillant, hunaudieres, mulsanne, arnage, tertre rouge, dunlop,997, gt3-rsr, le mans series, american le mans series, fia-gt, fia-gt3, audi R10,audi R8, corvette, dtm, grand-am, vdev, supergt, jgtc, jlmc, radical, pescarolo, creation, zytek, zultec, michelin, pirelli, oreca, lmp, lmp1, lmp2, le mans prototype, dome, F430, audi r18"/>
        <meta name="publisher" content="Anne-Sophie Wichser"/>
        <meta name="viewport" content="width=device-width; initial-scale=1.0">
        <link href="css/layout.css" rel="stylesheet" type="text/css"/>
        <link href="css/classicTheme/style.css" rel="stylesheet" type="text/css"/>
        <link rel="author" href="mailto:info@swissapco.ch"/>
        <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script src="js/jquery.js" type="text/javascript"></script>     
        <script src="js/ajaxupload-min.js" type="text/javascript"></script>
        <script src="js/ajaxupload.js" type="text/javascript"></script>
        <script type="text/javascript" src="editeur/ckeditor.js"></script>
    </head>
    <body>
        <div id="container">            
            <div id="horizon">
                <div id="wrapper">
                    <nav>
                        <p class="header">administrateur</p><br /><a class="normal" href="logout.php">Se déconnecter</a><br /><br /><p class="header">news</p><br /><a class="normal" href="add_news.php">Ajouter une news</a><br /><a class="normal" href="list_news.php">Administrer les news</a><br /><br /><p class="header">galeries</p><br /><a class="normal" href="add_gallery.php?gallery=lemans">24 Heures du Mans</a><br /><a class="normal" href="add_gallery.php?gallery=aero">Aviation</a><br /><a class="normal" href="add_gallery.php?gallery=retro">Rétrospective</a><br /><a class="normal" href="add_gallery.php?gallery=para">Parapente</a><br /><a class="normal" href="add_gallery.php?gallery=wild">Nature</a><br /><br /><p class="header">présentation</p><br /><a class="normal" href="list_about.php">Administrer les présentations</a><br /><br />                  </nav>
                    <div id="main">
                        <div id="demo1"></div><form action="upload.php" method="post" id="THEFORM"><fieldset><legend>Gallery selected</legend><input type="text" name="galleryname" value="wild" /><input type="submit" value="Submit" /></fieldset></form>                 </div>                      
                </div>
            </div>
        </div>
        <script>
            CKEDITOR.replace( 'editor1' );
        </script>
        <script>
            var galleryfolder='wild/';
            $('#demo1').ajaxupload({
                url:'upload.php',
                remotePath: '../files/'+galleryfolder,
                editFilename:true,
                form:'#THEFORM'
            });
        </script>
    </body>
</html>

上传.php

<?php
    /**
     * PHP Real Ajax Uploader
     * Copyright @Alban Xhaferllari
     * albanx@gmail.com
     * www.albanx.com
     */
    error_reporting(E_ALL ^ E_NOTICE);//remove notice for json invalidation

    $uploadPath = $_REQUEST['ax-file-path'];
    $fileName   = $_REQUEST['ax-file-name'];
    $currByte   = $_REQUEST['ax-start-byte'];
    $maxFileSize= $_REQUEST['ax-maxFileSize'];
    $html5fsize = $_REQUEST['ax-fileSize'];
    $isLast     = $_REQUEST['isLast'];

    //if set generates thumbs only on images type files
    $thumbHeight    = $_REQUEST['ax-thumbHeight'];
    $thumbWidth     = $_REQUEST['ax-thumbWidth'];
    $thumbPostfix   = $_REQUEST['ax-thumbPostfix'];
    $thumbPath      = $_REQUEST['ax-thumbPath'];
    $thumbFormat    = $_REQUEST['ax-thumbFormat'];

    $allowExt   = (empty($_REQUEST['ax-allow-ext']))?array():explode('|', $_REQUEST['ax-allow-ext']);
    $uploadPath .= (!in_array(substr($uploadPath, -1), array('\\','/') ) )?DIRECTORY_SEPARATOR:'';//normalize path

    if(!file_exists($uploadPath) && !empty($uploadPath))
    {
        mkdir($uploadPath, 0777, true);
    }

    if(!file_exists($thumbPath) && !empty($thumbPath))
    {
        mkdir($thumbPath, 0777, true);
    }


    //with gd library

    function createThumbGD($filepath, $thumbPath, $postfix, $maxwidth, $maxheight, $format='jpg', $quality=75)
    {   
        if($maxwidth<=0 && $maxheight<=0)
        {
            return 'No valid width and height given';
        }

        $gd_formats = array('jpg','jpeg','png','gif');//web formats
        $file_name  = pathinfo($filepath);
        if(empty($format)) $format = $file_name['extension'];

        if(!in_array(strtolower($file_name['extension']), $gd_formats))
        {
            return false;
        }

        $thumb_name = $file_name['filename'].$postfix.'.'.$format;

        if(empty($thumbPath))
        {
            $thumbPath=$file_name['dirname'];   
        }
        $thumbPath.= (!in_array(substr($thumbPath, -1), array('\\','/') ) )?DIRECTORY_SEPARATOR:'';//normalize path

        // Get new dimensions
        list($width_orig, $height_orig) = getimagesize($filepath);
        if($width_orig>0 && $height_orig>0)
        {
            $ratioX = $maxwidth/$width_orig;
            $ratioY = $maxheight/$height_orig;
            $ratio  = min($ratioX, $ratioY);
            $ratio  = ($ratio==0)?max($ratioX, $ratioY):$ratio;
            $newW   = $width_orig*$ratio;
            $newH   = $height_orig*$ratio;

            // Resample
            $thumb = imagecreatetruecolor($newW, $newH);
            $image = imagecreatefromstring(file_get_contents($filepath));

            imagecopyresampled($thumb, $image, 0, 0, 0, 0, $newW, $newH, $width_orig, $height_orig);

            // Output
            switch (strtolower($format)) {
                case 'png':
                    imagepng($thumb, $thumbPath.$thumb_name, 9);
                break;

                case 'gif':
                    imagegif($thumb, $thumbPath.$thumb_name);
                break;

                default:
                    imagejpeg($thumb, $thumbPath.$thumb_name, $quality);;
                break;
            }
            imagedestroy($image);
            imagedestroy($thumb);
        }
        else 
        {
            return false;
        }
    }


    //for image magick
    function createThumbIM($filepath, $thumbPath, $postfix, $maxwidth, $maxheight, $format)
    {
        $file_name  = pathinfo($filepath);
        $thumb_name = $file_name['filename'].$postfix.'.'.$format;

        if(empty($thumbPath))
        {
            $thumbPath=$file_name['dirname'];   
        }
        $thumbPath.= (!in_array(substr($thumbPath, -1), array('\\','/') ) )?DIRECTORY_SEPARATOR:'';//normalize path

        $image = new Imagick($filepath);
        $image->thumbnailImage($maxwidth, $maxheight);
        $images->writeImages($thumbPath.$thumb_name);
    }


    function checkFilename($fileName, $size)
    {
        global $allowExt, $uploadPath, $maxFileSize;

        //------------------max file size check from js
        $maxsize_regex = preg_match("/^(?'size'[\\d]+)(?'rang'[a-z]{0,1})$/i", $maxFileSize, $match);
        $maxSize=4*1024*1024;//default 4 M
        if($maxsize_regex && is_numeric($match['size']))
        {
            switch (strtoupper($match['rang']))//1024 or 1000??
            {
                case 'K': $maxSize = $match[1]*1024; break;
                case 'M': $maxSize = $match[1]*1024*1024; break;
                case 'G': $maxSize = $match[1]*1024*1024*1024; break;
                case 'T': $maxSize = $match[1]*1024*1024*1024*1024; break;
                default: $maxSize = $match[1];//default 4 M
            }
        }

        if(!empty($maxFileSize) && $size>$maxSize)
        {
            echo json_encode(array('name'=>$fileName, 'size'=>$size, 'status'=>'error', 'info'=>'File size not allowed.'));
            return false;
        }
        //-----------------End max file size check


        //comment if not using windows web server
        $windowsReserved    = array('CON', 'PRN', 'AUX', 'NUL','COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9',
                                'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9');    
        $badWinChars        = array_merge(array_map('chr', range(0,31)), array("<", ">", ":", '"', "/", "\\", "|", "?", "*"));

        $fileName   = str_replace($badWinChars, '', $fileName);
        $fileInfo   = pathinfo($fileName);
        $fileExt    = $fileInfo['extension'];
        $fileBase   = $fileInfo['filename'];

        //check if legal windows file name
        if(in_array($fileName, $windowsReserved))
        {
            echo json_encode(array('name'=>$fileName, 'size'=>0, 'status'=>'error', 'info'=>'File name not allowed. Windows reserverd.'));  
            return false;
        }

        //check if is allowed extension
        if(!in_array($fileExt, $allowExt) && count($allowExt))
        {
            echo json_encode(array('name'=>$fileName, 'size'=>0, 'status'=>'error', 'info'=>"Extension [$fileExt] not allowed."));  
            return false;
        }

        $fullPath = $uploadPath.$fileName;
        $c=0;
        while(file_exists($fullPath))
        {
            $c++;
            $fileName   = $fileBase."($c).".$fileExt;
            $fullPath   = $uploadPath.$fileName;
        }
        return $fullPath;
    }

    if(isset($_FILES['ax-files'])) 
    {
        //for each theorically runs only 1 time, since i upload i file per time
        foreach ($_FILES['ax-files']['error'] as $key => $error)
        {
            if ($error == UPLOAD_ERR_OK)
            {
                $newName = !empty($fileName)? $fileName:$_FILES['ax-files']['name'][$key];
                $fullPath = checkFilename($newName, $_FILES['ax-files']['size'][$key]);

                if($fullPath)
                {
                    move_uploaded_file($_FILES['ax-files']['tmp_name'][$key], $fullPath);
                    if(!empty($thumbWidth) || !empty($thumbHeight))
                        createThumbGD($fullPath, $thumbPath, $thumbPostfix, $thumbWidth, $thumbHeight, $thumbFormat);

                    echo json_encode(array('name'=>basename($fullPath), 'size'=>filesize($fullPath), 'status'=>'uploaded', 'info'=>'File uploaded'));
                }
            }
            else
            {
                echo json_encode(array('name'=>basename($_FILES['ax-files']['name'][$key]), 'size'=>$_FILES['ax-files']['size'][$key], 'status'=>'error', 'info'=>$error)); 
            }
        }
    }
    elseif(isset($_REQUEST['ax-file-name'])) 
    {
        //check only the first peice
        $fullPath = ($currByte!=0) ? $uploadPath.$fileName:checkFilename($fileName, $html5fsize);

        if($fullPath)
        {
            $flag           = ($currByte==0) ? 0:FILE_APPEND;
            $receivedBytes  = file_get_contents('php://input');
            //strange bug on very fast connections like localhost, some times cant write on file
            //TODO future version save parts on different files and then make join of parts
            while(@file_put_contents($fullPath, $receivedBytes, $flag) === false)
            {
                usleep(50);
            }

            if($isLast==true)
            {
                createThumbGD($fullPath, $thumbPath, $thumbPostfix, $thumbWidth, $thumbHeight, $thumbFormat);
            }
            echo json_encode(array('name'=>basename($fullPath), 'size'=>$currByte, 'status'=>'uploaded', 'info'=>'File/chunk uploaded'));
        }
    }

    //var_dump($_POST);
?>
4

0 回答 0