画像のzipファイルをフォルダーにアップロードして解凍するコードを作成しました。このファイルは upload2.php です。フォルダー名の入力に使用する upload1.php もあります。
スクリプトがファイルを解凍してターゲットフォルダーに保存した後、それらをサムネイルに変換し、それらのサムネイルを別のフォルダーに保存する機能を追加しようとしています。
スクリプトは、すべての個別のファイルに関するさまざまなデータを mysql データベースに INSERT しています。
コードは次のとおりです。
<?php // actual code for upload
$dirname = trim($_POST['dirname']);
$taken = trim($_POST['taken']);
$location = trim($_POST['location']);
$subject = trim($_POST['subject']);
$rooturl = "http://example.com/test";
$dateurl = $dirname.'/';
$mainurl = $rooturl.$dateurl;
require_once 'connect.php';
$sqlselect = "SELECT * from learning2 WHERE location='test2';";
$result = mysql_query($sqlselect) or die(mysql_error());
$thumbwidth = 100;
$thumbheight = 100;
function makeThumbnail($sourcefile, $endfile, $thumbwidth, $thumbheight, $quality) {
ini_set( "memory_limit","192M");
// Takes the sourcefile (path/to/image.jpg) and makes a thumbnail from it
// and places it at endfile (path/to/thumb.jpg).
// Load image and get image size.
if (file_exists($sourcefile)) {
$img = imagecreatefromjpeg($sourcefile);
$width = imagesx( $img );
$height = imagesy( $img );
if ($width > $height) {
$newwidth = $thumbwidth;
$divisor = $width / $thumbwidth;
$newheight = floor( $height / $divisor);
} else {
$newheight = $thumbheight;
$divisor = $height / $thumbheight;
$newwidth = floor( $width / $divisor );
}
// Create a new temporary image.
$tmpimg = imagecreatetruecolor( $newwidth, $newheight );
// Copy and resize old image into new image.
imagecopyresampled( $tmpimg, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height );
// Save thumbnail into a file.
imagejpeg( $tmpimg, $endfile, $quality);
// release the memory
imagedestroy($tmpimg);
imagedestroy($img);
} else {
echo "The file " . $sourcefile . " does not exist";
}
}
function makeDirectory($dirname) { //This function makes both the directory the photos will be unzipped into, and a directory nested within that for the thumbnails of those photos.
mkdir($dirname, 0777);
mkdir($dirname.'/thumbs', 0777);
}
if(isset($_POST['submit'])) {
if (file_exists($dirname) && is_dir($dirname)) { // determines whether or not this particular directory exists
echo "the directory exists and it is called: " . $mainurl;
echo "<br />";
} else {
makeDirectory($dirname);
}
if($_FILES["zip_file"]["name"]) { // pull the name of the zip file from the upload
$filename = $_FILES["zip_file"]["name"];
$source = $_FILES["zip_file"]["tmp_name"];
$type = $_FILES["zip_file"]["type"];
$name = explode(".", $filename); //format the filename for a variable
$accepted_types = array('application/zip', 'application/x-zip-compressed', 'multipart/x-zip', 'application/x-compressed');
foreach($accepted_types as $mime_type) {
if($mime_type == $type) {
$okay = true;
break;
}
}
$continue = strtolower($name[1]) == 'zip' ? true : false; // let user know if the zip file has not been uploaded
if(!$continue) {
$message = "The file you are trying to upload is not a .zip file. Please try again.";
}
$target_path = $dirname."/".$name; // get the $target_path variable to for the move_uploaded_file() function.
if(move_uploaded_file($source, $target_path)) { // this block extracts the zip files and moves them to the $dirname directory
$zip = new ZipArchive();
$x = $zip->open($target_path);
if ($x === true) {
$zip->extractTo($dirname."/");
$images = array();
for ($i=0; $i<$zip->numFiles; $i++) {
$images[] = $zip->getNameIndex($i);
}
$zip->close();
unlink($target_path);
}
$message = "Your .zip file was uploaded and unpacked.";
}
} else {
$message = "There was a problem with the upload. Please try again.";
}
$newdir = scandir($dirname);
foreach ($newdir as $key => $value) {
if ($value!='.' && $value!='..') {
$thumburl = $rooturl.$dateurl.'thumbs/'.$value;
echo 'Key: ' . "$key;" . ' Value: ' . "$value" ."<br />\n";
$sourcefile = $value;
$endfile = 'http://example.com/test/'.$dirname.'/thumbs/'.'$value';
makeThumbnail($sourcefile, $endfile, $thumbwidth, $thumbheight, $quality);
mysql_query("INSERT INTO learning3 (taken, location, subject, rooturl, dateurl, imagename, thumburl) VALUES ('$taken', '$location', '$subject', '$rooturl', '$dateurl', '$value', '$thumburl')");
echo "<br />";
echo '<img src="'.$thumburl.'>< /img>';
echo "$value"." inserted successfully!";
} else {
echo $value." not inserted, thumbnail not created.";
echo $insert_sql . '<BR>' . mysql_error();
}
}
} else { echo 'Please input your data and select a zip file.';
}
echo '<html>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR...nsitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
if($message) echo "<p>$message</p>";
if($taken) echo "<p>pictures taken on: " . $taken . "</br>";
if($subject) echo "<p>subject: " . $subject . "</br>";
if($location) echo "<p>location: " . $location . "</br>";
if(($rooturl) && ($dateurl)) echo "<p>directory is called: " . $rooturl.$dateurl. "</br>";
?>
<form enctype="multipart/form-data" method="post" action="upload2.php">
<label for="dirname">Directory to use?: </label> <input name="dirname" size="20" type="text" value="<?php echo $dirname; ?>" /><br />
<label for="taken">When was this taken?:</label> <input name="taken" size="20" type="text" value="<?php echo $dirname; ?>" /><br />
<label for="location">Where was this taken?</label> <input name="location" size="20" type="text" /><br />
<label for="subject">subject?</label> <input name="subject" size="20" type="text" /><br />
<!--< />-->
<input type=hidden name="mainurl" value="<?php echo "http://example.com/test/".'$dirname;' ?>" />
<label>Choose a zip file to upload: <input type="file" name="zip_file" /></label>
<br />
<input type=submit name='submit' value="Upload" />
</form>
</body>
</html>
スクリプトについて理解できないのは、正しいフォルダーを作成し、mysql の挿入が成功するにもかかわらず、サムネイルを作成して新しいサムネイル フォルダーに配置しないことです。サムネイルが保存されるのではなく、「ファイルが存在しません」という単純なエラー メッセージが表示されます。問題は、スクリプトの前半でファイルが作成されるため、ファイルが存在することはわかっています。ここで私が間違っていることを誰かに教えてもらえますか、またはどこを見ればいいのかヒントを教えてもらえますか?