2

画像の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 の挿入が成功するにもかかわらず、サムネイルを作成して新しいサムネイル フォルダーに配置しないことです。サムネイルが保存されるのではなく、「ファイルが存在しません」という単純なエラー メッセージが表示されます。問題は、スクリプトの前半でファイルが作成されるため、ファイルが存在することはわかっています。ここで私が間違っていることを誰かに教えてもらえますか、またはどこを見ればいいのかヒントを教えてもらえますか?

4

1 に答える 1

1

そのため、関数を直接テストしましたmakeThumbnail()(現在のディレクトリ内のファイルとその外のファイルの両方を使用)が、どちらの場合も正常に機能しました。コードを完全に実行できなければ、何が起こっているのかを正確に知るのはちょっと難しいですが、私の推測では、makeThumbnail(). 電話をかける前にパスを追加するのを忘れている可能性は$sourcefileありますか? の先頭または末尾に空白がある可能性はあり$sourcefileますか? 関数は機能するため、責任があるのは呼び出し元のコードでなければなりません。

そのコードをすくい取るだけで、呼び出しは :makeThumbnail($dirname.$sourcefile[...])の代わりにmakeThumbnail($sourcefile[...])(または"$dirname/$sourcefile"、しかし要点はわかります) ではありませんか?

于 2013-07-24T17:43:26.537 に答える