move_uploaded_file: 使用另一个目录时没有这样的文件
move_uploaded_file: no such file when another directory is used
我正在使用这个 answer,他们使用的地方:
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);
如果我在执行此代码的 'php' 目录中创建一个 'uploads' 目录,这就像一个魅力。
如果我尝试这样做:
move_uploaded_file($_FILES['file']['tmp_name'], '../img/' . $_FILES['file']['name']);
我收到此警告:
我在这里错过了什么?我也试过绝对路径!
目录树:
scouter
-img
-php
-uplodas
-upload.php
'img' 目录似乎有所需的权限选项。
EDIT_0:
如果我将文件放在 uploads
目录中,然后使用 rename()
,它将把文件放在 img
目录中...无法了解正在发生的事情!
EDIT_1:
HTML:
<input id="input_pic" type='file' name='userFile'/>
<div>
<img class="profile_pic" src="img/newname.jpg" alt="player_img" />
</div>
JS:
var file_data = $('#input_pic').prop('files')[0];
var form_data = new FormData();
form_data.append('file', file_data);
alert(form_data);
$.ajax({
url: 'php/upload.php',
dataType: 'text',
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
success: function(php_script_response){
alert(php_script_response);
}
});
EDIT_2:
服务器响应,来自swidmann的回答:
你在你的 HTML 中使用了另一个名字,我有点怀疑,这以前是有效的,你的 HTML:
<input id="input_pic" type='file' name='userFile'/>
由于 php 它应该是:
<input id="input_pic" type='file' name='file'/>
或者您的 php 应该使用:
$_FILES['userFile']['tmp_name']
我想你的问题可能是上传大小,试试这个来调试:
var_dump( $_FILES );
$upload = move_uploaded_file( $_FILES['file']['tmp_name'], dirname( dirname( __FILE__ ) ).'/img/'. $_FILES['file']['name'] );
var_dump( $upload );
var_dump( ini_get("upload_max_filesize") );// what is allowed and how big is your picture?
var_dump( $_FILES['file']['size'] );// if this is 0, maybe your allowed upload size is to low
顺便说一句,我试过了,它成功了:
dirname( dirname( __FILE__ ) ).'/img/'
要更改允许的上传大小,您必须更改以下选项:
在 php.ini.
中设置 upload_max_filesize
和 post_max_size
; Maximum allowed size for uploaded files.
upload_max_filesize = 40M
; Must be greater than or equal to upload_max_filesize
post_max_size = 40M
如果都可以,请尝试绝对路径:
move_uploaded_file( $_FILES['file']['tmp_name'], $_SERVER["DOCUMENT_ROOT"]."/test/scouter/img/".$_FILES['file']['name'] );
我正在使用这个 answer,他们使用的地方:
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);
如果我在执行此代码的 'php' 目录中创建一个 'uploads' 目录,这就像一个魅力。
如果我尝试这样做:
move_uploaded_file($_FILES['file']['tmp_name'], '../img/' . $_FILES['file']['name']);
我收到此警告:
我在这里错过了什么?我也试过绝对路径!
目录树:
scouter
-img
-php
-uplodas
-upload.php
'img' 目录似乎有所需的权限选项。
EDIT_0:
如果我将文件放在 uploads
目录中,然后使用 rename()
,它将把文件放在 img
目录中...无法了解正在发生的事情!
EDIT_1:
HTML:
<input id="input_pic" type='file' name='userFile'/>
<div>
<img class="profile_pic" src="img/newname.jpg" alt="player_img" />
</div>
JS:
var file_data = $('#input_pic').prop('files')[0];
var form_data = new FormData();
form_data.append('file', file_data);
alert(form_data);
$.ajax({
url: 'php/upload.php',
dataType: 'text',
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
success: function(php_script_response){
alert(php_script_response);
}
});
EDIT_2:
服务器响应,来自swidmann的回答:
你在你的 HTML 中使用了另一个名字,我有点怀疑,这以前是有效的,你的 HTML:
<input id="input_pic" type='file' name='userFile'/>
由于 php 它应该是:
<input id="input_pic" type='file' name='file'/>
或者您的 php 应该使用:
$_FILES['userFile']['tmp_name']
我想你的问题可能是上传大小,试试这个来调试:
var_dump( $_FILES );
$upload = move_uploaded_file( $_FILES['file']['tmp_name'], dirname( dirname( __FILE__ ) ).'/img/'. $_FILES['file']['name'] );
var_dump( $upload );
var_dump( ini_get("upload_max_filesize") );// what is allowed and how big is your picture?
var_dump( $_FILES['file']['size'] );// if this is 0, maybe your allowed upload size is to low
顺便说一句,我试过了,它成功了:
dirname( dirname( __FILE__ ) ).'/img/'
要更改允许的上传大小,您必须更改以下选项: 在 php.ini.
中设置upload_max_filesize
和 post_max_size
; Maximum allowed size for uploaded files.
upload_max_filesize = 40M
; Must be greater than or equal to upload_max_filesize
post_max_size = 40M
如果都可以,请尝试绝对路径:
move_uploaded_file( $_FILES['file']['tmp_name'], $_SERVER["DOCUMENT_ROOT"]."/test/scouter/img/".$_FILES['file']['name'] );