我正在使用此Simple-Ajax-Uploader插件上传文件,然后我使用This PHP library来处理文件,执行诸如生成随机文件名,调整大小和指定目录以保存文件文件等。
以下是代码:
<?php
require('../classes/class.upload.php');
require('../classes/User.php');
//Process a file uploaded via XMLHttpRequest
$handle = new upload($_FILES['uploadfile']['tmp_name']);
if ($handle->uploaded) {
$handle->file_new_name_body = User::generateRandomString();
$handle->image_resize = true;
$handle->image_x = 360;
$handle->image_ratio_y = true;
$handle->process('temp-uploads');
if ($handle->processed) {
echo json_encode(array('success' => true, 'newfilename' => $handle->file_dst_name));
$handle->clean();
} else {
exit(json_encode(array('success' => false, 'msg' => $handle->error)));
}
}
好吧,该文件将成功上传,但不知何故,它会通过任何网页无法访问,如果我尝试访问浏览器上的“site-name.com/directory-name/filename.jpg”,它也无法访问。它显示404未找到。
我还认为这可能是文件权限问题,但在给上传文件(包括其目录)所有可能的权限之后,它们仍然是404 Not Found。目前,ajax上传的文件在cPanel文件管理器中可见,但在URL中无法访问。
最后,出于好奇,我通过cPanel直接将另一个文件上传到服务器,并且可以访问该文件,但其他文件仍然神秘地无法访问404 Not Found。我还将一个无法访问的文件重命名为test.jpg,但它仍然无法访问。 我试图在这里搜索类似的问题,但找不到。
请问这里出了什么问题?
修改
我发现这是文件所有权权限问题,文件上传的目录以及其中的文件分别具有不同的所有者用户名1128和99。 我已修改问题的标题以包含“文件所有权/权限问题”。
此外,我在错误日志中为每个上传的文件重复发现以下消息:
[Sat May 26 09:28:05.584102 2018] [core:error] [pid 9320:tid 140646036481792] [client 209.126.90.118:59372] Caught race condition abuser. attacker: 1128, victim: 99 open file owner: 99, open file: /home/royalsee/public_html/php/MichenoCoop/dashboard/temp-uploads/32_3.JPG, referer: http://michenocoop.com/dashboard/temp-uploads/
答案 0 :(得分:0)
我知道您已经检查过:
可能是文件权限问题,但在提供上传的文件后 包括他们的目录)所有可能的权限,他们仍然 找不到404
但根据S.O的回答What's the meaning of this error message in error log?,问题可能是文件的 所有权 :
错误的权限或所有权也可能触发此错误。我有 通过更改我的应用程序目录的所有权解决它。它是 由root拥有。
此处再次出现与日志文件相同的错误:
https://alexantop.wordpress.com/2013/05/07/caught-race-condition-abuser/
使用相同的解决方案:
将文件所有权更改为“用户名”。
您可以检查文件夹的所有权,并尝试将其更改为www-data
或可从互联网访问的某些用户。
希望它有所帮助!
答案 1 :(得分:0)