我正在关注udemy上使用php上传图像文件的教程。我可以选择一个图像并将其上传到文件夹而没有任何问题。
当我将图片上传到文件夹后点击图片时,windows photo viewer说:“photo.png您似乎无权查看此文件。请检查权限并重试”。< / p>
当我检查权限时,它说“您必须具有读取权限才能查看此文件的属性”。
我使用chmod函数设置为0755,允许所有者读写,并让其他人读取它。我尝试更改chmod代码,但没有帮助。
我认为它与我的服务器权限有关,但在谷歌上找不到任何解决方案。我的图像上传到Abyss Web Server。
以下是代码:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
function upload_file() {
//setup
$tmp_name = $_FILES['file']['tmp_name'];
$target_dir = 'uploads/';
$target_file = $target_dir . basename($_FILES['file']['name']);
$max_file_size = 5000000; //5mb
$allowed_file_types = array('application/pdf; charset=binary');
$allowed_image_types = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG);
//check if image type is allowed
$image_check = getimagesize($tmp_name);
if(! in_array($image_check[2], $allowed_image_types)) {
//if not allowed image check if allowed file type
exec('file -bi' . $tmp_name, $file_check);
if(! in_array($file_check[0], $allowed_file_types)) {
return 'This file type is not allowed';
}
}
//check if file already exists
if(file_exists($target_file)) {
return 'Sorry that file already exists';
}
//check file size
if(file_exists($target_file)) {
return 'Sorry this file is too big';
}
//store the file
if(move_uploaded_file($tmp_name, $target_file)) {
chmod($target_file, 0644);
return 'Your file was uploaded';
}
else {
return 'There was a problem storing your file. Try again?';
}
}
if(! empty($_FILES)) {
echo upload_file();
}
?>
<form action="" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="file">
<input type="submit" Value="upload">
</form>
答案 0 :(得分:0)
由于使用专门用于测试动机的自定义HTML页面加载文件确实可以正确显示图像,因此很可能是热链接保护问题。 (这是在对该问题发表一些评论后发现的。)
例如,在cPanel中,有一个管理此功能的工具,它围绕着名为.htaccess
的文件的使用。该文件用于Web开发世界中的许多事情。
有些人不喜欢访问他们受版权保护的图片,所以避免没有经验的人(比如说,“用户名中的人”)这样做的一种方法是启用此保护。这适用于您设置的任何给定文件扩展名。
解决此问题的一种方法是转到cPanel并禁用(或相应地修改)Hotlink Protection功能。另一种方法是找到导致问题的.htaccess
文件,这需要了解它的工作方式和使用的语法。