PHP Tar 带变量的提取

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 文件。

我的目标是提取上传目录中的 tar 文件,然后 运行 移动命令将文件移动到需要的位置。然后清理并删除 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 中?

解决了问题 - 我需要利用 pharData 中的 UPLOAD_DIR . $name

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