【发布时间】:2016-09-02 21:15:58
【问题描述】:
我正在为我的网站创建个人资料图片上传功能,但由于某种原因,move_uploaded_file() 不想运行。
我尝试了多个论坛并测试了所有可能的不同方法,但都没有运气。
这是我的 PHP 和 HTML:
<?php
if(isset($_FILES['avatar'])){
if(empty($_FILES['avatar']['name'])){
$errors[] = 'Please select an avatar.';
} else {
$ext = array('jpg', 'jpeg', 'png');
$file = $_FILES['avatar']['name'];
$fileext = strtolower(end(explode('.', $file)));
$filetmp = $_FILES['avatar']['tmp_name'];
if(in_array($fileext, $ext)){
$file = md5(microtime() . $filetmp) . '.' . $fileext;
$filepth = './data/user_data/img/udid/prof/' . $file;
move_uploaded_file($filetmp, $filepth);
} else {
$errors[] = 'Please select a valid file type. (JPG, JPEG or PNG)';
}
}
}
?>
<form action="" method="post" class="avatar-form-form" enctype="multipart/form-data">
<input type="file" name="avatar"><br>
<input type="submit" value="Upload">
</form>
首先,我正在检查所选文件是否具有有效的扩展名,如果是,它将使用微时间散列文件临时名称(出于安全考虑)。然后,我将扩展名连接到末尾,并在其间加上句号,即输出将是md5hash.png。
然后我通过将文件变量连接到我的目录末尾来创建文件路径变量。
然后我通过传递$filetmp 和$filepth 变量(就像你应该做的那样)继续文件上传功能。
但是,当我在我的页面上测试此功能时,我收到以下错误:
Warning: move_uploaded_file(./data/user_data/img/udid/prof/e4d0cde3c9330222ef3ab651fe797bed.jpg):
failed to open stream: Permission denied in /Applications/XAMPP/xamppfiles/htdocs/test/settings.php
on line 40
Warning: move_uploaded_file(): Unable to move '/Applications/XAMPP/xamppfiles/temp/phpkWSGLy'
to './data/user_data/img/udid/prof/e4d0cde3c9330222ef3ab651fe797bed.jpg'
in /Applications/XAMPP/xamppfiles/htdocs/test/settings.php
on line 40
这是我目前的布局:
设置页面(用户上传图片的页面)在根目录下。
我要放置头像的位置在文件夹内(也在根目录中。
我目前正在运行 XAMPP 的 MacBook 上测试所有这些,并确保在我的 php.ini 文件中将 file_uploads 设置为“on”。
感谢所有帮助。不确定我是否做错了,但我几乎可以肯定我没有。
编辑:
所以,事实证明,默认情况下,在 MacBook 上(运行 XAMPP 时),XAMPP/htdocs 中的所有文件都设置为只读,您必须手动将它们设置为“读写”以允许 move_uploaded_file上班。
【问题讨论】:
标签: php