问题
I'm trying to implement this PHP & JQuery uploader: http://code.google.com/p/ax-jquery-multiuploader/
I didn't change anything, and used the "Form integration and file rename" example as I need to send the gallery name in the form to set the folder path. The upload is working, but as soon as it's done, I get a blank page. I don't really understand why...
And the weirdest thing: every time I try to modify the upload.php file given with the package to get a message, the upload seems not to work anymore (progress bar is stopping at circa 25% and nothing more happens, I stay on the same page), but the files are uploaded.
I would like to get a page with the list of images uploaded, to complete them with a caption and then insert datas in a database (image path, name and caption).
Does anyone understand what it happens ?
Thank you,
Ashina
EDIT: Some help... PHPinfo and PHP pages. I tried to include both header.php and body.php as I have to do for all my pages, but as I explained it, it causes the weirdest thing.
Server 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>
upload.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);
?>
来源:https://stackoverflow.com/questions/13491443/php-jquery-uploader-by-albanx-blank-page