0

以下の簡単なスクリプトを使用して、php 経由で zip ファイルをアップロードし、サーバーで解凍しています。

ファイルは圧縮されたフォルダーになります。アップロードが完了したら、新しいフォルダーへのリンクをエコーし​​ます。

たとえば、「bar」というフォルダを含む zip ファイルをアップロードした場合、成功メッセージの後に「http://foo.com/bar」をエコーし​​ます。

どんな助けでも大歓迎です。

<?php
if($_FILES["zip_file"]["name"]) {
$filename = $_FILES["zip_file"]["name"];
$source = $_FILES["zip_file"]["tmp_name"];
$type = $_FILES["zip_file"]["type"];

$name = explode(".", $filename);
$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;
if(!$continue) {
    $message = "The file you are trying to upload is not a .zip file. Please try again.";
}

$target_path = "/home/var/foo.com/".$filename;  // change this to the correct    
site     path
if(move_uploaded_file($source, $target_path)) {
    $zip = new ZipArchive();
    $x = $zip->open($target_path);
    if ($x === true) {
        $zip->extractTo("/home/var/foo.com/"); // change this to the correct site path
        $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.";
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1   
/DTD/xhtml1-transitional.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>"; ?>
<form enctype="multipart/form-data" method="post" action="">
<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>
4

2 に答える 2

0

あなたのコードを詳しく見てみると、いくつかコメントできると思います。

1) mkdir() を使用して、サイトのアップロード ディレクトリに新しいディレクトリを作成する必要があります (この場合はルートであると想定しています)。

2) アップロードしたファイルを解凍する前に移動する必要はありません。新しく作成したディレクトリに解凍するだけです。同じ名前の別のディレクトリが存在しないことを確認してください。アップロードされたファイルは PHP によって自動的に削除されるため、リンクを解除する必要はありません。

3) 参照:

$name = explode(".", $filename);

ファイル名に複数のドットがある場合はどうなりますか? 最後のドットの後のすべてを取得するには、実際には strrpos() で substr() を使用する必要があります。

4) アップロード後、パスhttp://www.yoursite.com/newdirをそのままエコーします。問題はありません。困っていることをより具体的に説明できる場合は、コメントしてください。

于 2012-07-09T01:13:41.260 に答える
0

すべてをざっと見て、私は言うだろう

$message = "Your .zip file was uploaded and unpacked. <a href=\"http://domain.com".$filename."\">Files</a>";

あなたのスクリプトで収集したものから、ドメインのサーバーディレクトリパスに直接アップロードするように指示しました。$filenameそのパスにフォルダー名として追加して、それに応じてフォルダーを作成します。そこから、他のリンクと同じようにドメインをハードコーディングし、同じファイル名変数を末尾に追加して、アップロードしたばかりの同じフォルダーを表示します。

これは全体的な私の推測にすぎませんが、ここでもざっと見ただけです。

于 2012-07-09T01:07:46.447 に答える