我在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();
//
答案 0 :(得分:0)
如果您无权访问默认upload_tmp_dir
且无法更改,则应切换到其他主机。如果你联系过他们并且他们不愿意帮助你,那就更是如此。
您的问题可能有技术解决方案,但如果它应该在正常托管环境中开箱即用,那么它们都无关紧要。