PHP Tar Extract w / Variable

时间:2016-03-28 15:35:32

标签: php html tar phar

通过任何方式了解以下问题不是最佳做法。我正在构建的工具仅供个人使用,一般情况下无法访问互联网。在这里说的是我想要完成的想法或概述。

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名称相同但是我可以看到有人可能会改变它的用例。所以想确保我可以选择解决这个问题。

所以问题是如何提取tar文件 - 利用变量名称而不是拼写出来以及文件的实际名称都在PHP中?

1 个答案:

答案 0 :(得分:0)

找出问题 - 我需要在pharData中使用UPLOAD_DIR . $name

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