Php 共享主机问题-无根目录访问-文件上载
当我尝试上传到Php 共享主机问题-无根目录访问-文件上载,php,file-upload,upload,Php,File Upload,Upload,当我尝试上传到/non\u public\u html/时,我的托管团队的支持团队说: 。不幸的是,我有一些坏消息。由于共享主机限制,您似乎无法通过脚本移动该文件。为了拥有“www数据”权限,您需要有一个VPS包,以便获得根权限 所以我不能上传到/public\u html/之外的地方 但是,当我尝试上载到public_html时仍然失败,这是我的代码: $PICTURE_UPLOAD_DIR = '/public_html/my_uploaded/'; $PICTURE_MIMES = [
/non\u public\u html/
时,我的托管团队的支持团队说:
。不幸的是,我有一些坏消息。由于共享主机限制,您似乎无法通过脚本移动该文件。为了拥有“www数据”权限,您需要有一个VPS包,以便获得根权限
所以我不能上传到/public\u html/
之外的地方
但是,当我尝试上载到public_html时仍然失败,这是我的代码:
$PICTURE_UPLOAD_DIR = '/public_html/my_uploaded/';
$PICTURE_MIMES = [
'jpg' => 'image/jpeg',
'png' => 'image/png'
];
$image = $_FILES['image'];
$imagepath = $image['tmp_name'];
// Undefined | Multiple Files | $_FILES Corruption Attack
// If this request falls under any of them, treat it invalid.
if (!isset($image['error']) || is_array($image['error'])) {
$ojson['error'] = 'Invalid parameters'; $finish();
}
// Check $image['error'] value.
switch ($image['error']) {
case UPLOAD_ERR_OK:
break;
case UPLOAD_ERR_NO_FILE:
$ojson['error'] = 'No file sent'; $finish();
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
$ojson['error'] = 'Exceeded filesize limit.'; $finish();
default:
$ojson['error'] = 'Unknown errors.'; $finish();
}
// You should also check filesize here.
$size = filesize($imagepath);
// $size = $image['size']; // dont trust $_FILES
if ($size > 1000000) {
$ojson['error'] = 'Exceeded filesize limit.'; $finish();
}
// DO NOT TRUST $_FILES['image']['mime'] VALUE !!
// Check MIME Type by yourself.
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($imagepath);
// if ($ext = array_search($mime, $PICTURE_MIMES) === false) { // this doesnt set $ext
if (false === $ext = array_search($mime, $PICTURE_MIMES)) {
$ojson['error'] = 'Invalid file format.'; $finish();
}
$ojson['$ext'] = $ext;
$ojson['$mime'] = $mime;
// generate random file name
while (true) {
$filename = generateRandomString().'.'.$ext;
$pathtarget = $PICTURE_UPLOAD_DIR.$filename;
if (!file_exists($pathtarget)) break;
}
$ojson['$pathtarget'] = $pathtarget;
$ojson['$imagepath'] = $imagepath;
// $getimg = getimagesize($imagepath);
if(is_uploaded_file($imagepath)){
$ojson['isuploaded'] = true;
} else {
$ojson['NOTUPLOADED'] = true;
}
if(move_uploaded_file($imagepath, $pathtarget)) {
$ojson['ok move'] = 'ok';
} else {
$ojson['failed move'] = error_get_last();
}
move\u upload\u file
持续失败,并且error\u get\u last()
始终在打印:
move_upload_file():无法将“/tmp/php7G5KMy”移动到“/public_html/my_upload/Q9BEsUkDre.jpg”
IsUpload总是正确的。我很困惑,请您帮忙。/public\u html/my\u upload/…看起来像是来自fs根目录的路径。这绝对是错误的。非常感谢@zerkms先生,我没有意识到我必须做
。/我上传的哦,我的天啊,它成功了!最好从\uuuu DIR\uuuu
构建一条路径,这是脚本的绝对路径。现在您可以看到,支持部门甚至没有试图解决问题,而是试图向您销售服务:-SHaha非常感谢您,先生,您对销售部分的看法是正确的。我很乐意接受你的解决方案,所以你可以得到分数。