2016-03-28 24 views
0

次の質問はベスト・プラクティスではないことを理解してください。私が構築しているツールは個人的な使用のためであり、一般的にインターネットにアクセスすることはできません。それは私が達成しようとしているアイデアや概要です。PHP Tar Extract w/Variable

PHP:それは私がファイルをソートし、正しいスポットでそれらを配置する必要がありますアップロードされたら

define("UPLOAD_DIR", "/var/www/html/uploads/"); 

if (!empty($_FILES["SANUpload"])) { 
$myFile = $_FILES["SANUpload"]; 

if ($myFile["error"] !== UPLOAD_ERR_OK) { 
    echo "<p>An error occurred.</p>"; 
    exit; 
} 

// ensure a safe filename 
$name = preg_replace("/[^A-Z0-9._-]/i", "_", $myFile["name"]); 

// don't overwrite an existing file 
$i = 0; 
$parts = pathinfo($name); 
while (file_exists(UPLOAD_DIR . $name)) { 
    $i++; 
    $name = $parts["filename"] . "-" . $i . "." . $parts["extension"]; 
} 

// preserve file from temporary directory 
$success = move_uploaded_file($myFile["tmp_name"], 
    UPLOAD_DIR . $name); 
if (!$success) { 
    echo "<p>Unable to save file.</p>"; 
    exit; 
} 



// set proper permissions on the new file 
chmod(UPLOAD_DIR . $name, 0644); 


$val = shell_exec("tar -xvf $parts -C /var/www/html/uploads 2>&1"); 
echo '$val'; 
} 

目標があります。私がそれ専用に構築したスクリプトはtarファイルなので、アップロードは常にTARファイルになります。

私の目標は、uploadsディレクトリ内のtarファイルを抽出し、moveコマンドを実行して必要な場所にファイルを移動することです。次に、UPLOADSディレクトリ内のファイルをクリーンアップして削除します。

私はここに、この例を見つけました:

$val = shell_exec("tar -xvf $parts -C /var/www/html/uploads 2>&1"); 
echo '$val'; 

これは私も見ています別のコンポーネントである:

try { 
$phar = new PharData('myphar.tar'); 
$phar->extractTo('/full/path'); // extract all files 
$phar->extractTo('/another/path', 'file.txt'); // extract only file.txt 
$phar->extractTo('/this/path', 
    array('file1.txt', 'file2.txt')); // extract 2 files only 
$phar->extractTo('/third/path', null, true); // extract all files, and overwrite 
} catch (Exception $e) { 
// handle errors 
} 

私はPharDataを持っています、問題はそれが好きではないということです$ pathまたは$ name変数。上記のPharDataの例でも同じことが言えます。アップロードスクリプトは異なる名前を持つ可能性があるので、変数としてファイルを解凍するか、PHPスクリプトで変数を使用する必要があります。

技術的には、私が持っているスクリプトはタール名を同じにしていましたが、誰かがそれを変更する可能性のあるユースケースを見ることができました。だから私はそれに対処するオプションがあることを確認したい。

私はtarファイルをどのように抽出するのですか?PHPでファイルの実際の名前と綴りを変えずに変数名を利用していますか?

答えて

0

問題を解明 - pharDataでUPLOAD_DIR . $nameを利用する必要がありました。

try { 
$phar = new PharData(UPLOAD_DIR . $name); 
$phar->extractTo(UPLOAD_DIR); // extract all files 
} catch (Exception $e) { 
// handle errors 
}