是否可以上传文件而无需访问默认临时目录?

时间:2017-05-13 22:31:22

标签: php .htaccess

我在php中有一个非常通用的文件上传脚本。但问题是,我在托管我的网站的服务器 允许我配置php.ini和upload_tmp_dir。像ini_set('upload_tmp_dir','your_directory_path')这样的事情也不起作用,因为upload_tmp_dir已经在ini_set运行的时间执行了。

是否可以上传绕过临时文件创建的文件(任何语言)?由于函数move_uploaded_file($temp_file, $target_file);禁止我使用我当前的解决方案。

我无法访问服务器root / tmp(临时文件将存储在服务器上的位置)。我理解为什么托管公司不允许人们更改临时根,因为可能在同一台服务器上有很多客户。因此,更改php.ini文件会影响服务器上的所有用户。

另外,我已经看到一些关于更改vhost.conf文件的解决方案(理论上它可以在客户端到客户端修复此问题,但我已经与服务联系 - 提供者和他们似乎非常不愿意帮助我改变这一点)

我的php脚本:

$target_directory = "/wp-content/uploads/2017/04/";
$filename = $_POST['fileLocation'];
$temp_filename = $_FILES["file"]["tmp_name"];
$size = $_FILES["file"]["size"];

// Produce a unique filename
$randomNumber = time();
$filetype = substr($filename, strrpos($filename, '.'));
$target_file = $target_directory . $randomNumber . $filetype;
$local_path = "/wp-content/uploads/2017/04/" . $randomNumber . $filetype;

// Make sure the webserver process owner owns the destination folder
// run exec('whoami'), Mac could be _www
if(!move_uploaded_file($temp_filename, $target_file))
            //

// = = = = Add to database = = = =
// Establish connection to database
$conn = mysql_connect("***", "***", "***") or die(mysql_error());
//Select database
$db = mysql_select_db("***");

// Collect data from form
$companyname = $_POST["companyname"];
$companytext = $_POST["companytext"];

$query = "INSERT INTO posts (companyname, companytext, image) VALUES ('$companyname', '$companytext', '$local_path')";
mysql_query($query);
mysql_close();
        //

1 个答案:

答案 0 :(得分:0)

如果您无权访问默认upload_tmp_dir且无法更改,则应切换到其他主机。如果你联系过他们并且他们不愿意帮助你,那就更是如此。

您的问题可能有技术解决方案,但如果它应该在正常托管环境中开箱即用,那么它们都无关紧要。

相关问题