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