带变量的 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 提取的主要内容,如果未能解决你的问题,请参考以下文章

提取 tar 存档,不包括特定文件夹及其内容

如何使用 tar 提取没有文件夹结构的文件

php 将数组提取为变量名称

php 从url中提取变量

PHP 从img标签变量中提取图像路径

根据从 MySQL 中提取的一个值创建 PHP 会话变量