带变量的 PHP Tar 提取
Posted
技术标签:
【中文标题】带变量的 PHP Tar 提取【英文标题】:PHP Tar Extract w/ Variable 【发布时间】:2016-03-28 15:35:32 【问题描述】:了解以下问题无论如何都不是最佳做法。我正在构建的工具仅供个人使用,一般无法通过互联网访问。话虽如此,这里是我想要完成的想法或大纲。
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 拼写出文件名和文件的实际名称?
【问题讨论】:
【参考方案1】:找出问题所在 - 我需要在 pharData 中使用 UPLOAD_DIR . $name
。
try
$phar = new PharData(UPLOAD_DIR . $name);
$phar->extractTo(UPLOAD_DIR); // extract all files
catch (Exception $e)
// handle errors
【讨论】:
以上是关于带变量的 PHP Tar 提取的主要内容,如果未能解决你的问题,请参考以下文章