Php 如何修复mkdir();只读文件系统“;共享主机?
我正在尝试设置允许用户将文件上传到服务器(共享主机)目录的功能。用户可以键入上载文件夹名称并选择文件。如果文件夹不存在,则会创建该文件夹 请注意,这不是一个大的上传系统,但只有一个用户 我的代码在Php 如何修复mkdir();只读文件系统“;共享主机?,php,file-permissions,shared-hosting,mkdir,Php,File Permissions,Shared Hosting,Mkdir,我正在尝试设置允许用户将文件上传到服务器(共享主机)目录的功能。用户可以键入上载文件夹名称并选择文件。如果文件夹不存在,则会创建该文件夹 请注意,这不是一个大的上传系统,但只有一个用户 我的代码在localhost上运行良好。 使用公共服务器(共享主机),创建文件夹是可行的。但里面没有显示任何文件 上传功能,process.php: // run code only if post request went through if ($_SERVER['REQUEST_METHOD'] === '
localhost
上运行良好。
使用公共服务器(共享主机),创建文件夹是可行的。但里面没有显示任何文件
上传功能,process.php
:
// run code only if post request went through
if ($_SERVER['REQUEST_METHOD'] === 'POST' ) {
if (isset($_POST['folder'])) {
$folder = $_POST['folder'];
} else {
$folder = 'new-folder';
}
// ensure that there are files inside the array to actually upload
if (isset($_FILES['files'])) {
$errors = [];
$path = '/dir/data/uploads/images/' . $folder . "/";
// if folder does not exist, create it
if (!file_exists($path)) {
mkdir($path, 0777, true);
} else {
//stuff
}
$all_files = count($_FILES['files']['tmp_name']);
for ($i = 0; $i < $all_files; $i++) {
$file_name = $_FILES['files']['name'][$i];
$file_tmp = $_FILES['files']['tmp_name'][$i];
$file_type = $_FILES['files']['type'][$i];
$file_size = $_FILES['files']['size'][$i];
$tmp = explode('.', $_FILES['files']['name'][$i]);
$file_ext = strtolower(end($tmp));
$file = $path . $file_name;
// here follow multiple verifications on the file name, type, size, etc...
// removed to keep code shorter
if (empty($errors)) {
move_uploaded_file($file_tmp, $file);
}
}
if ($errors) print_r($errors);
}
}
Warning: mkdir(): Read-only file system in /path/to/scripts/process/process.php on line 31
/folder/data/uploads/images/test/image.webp --
Warning: move_uploaded_file(/folder/data/uploads/images/test/image.webp): failed to open stream: No such file or directory in /path/to/scripts/process/process.php on line 75
因此:
Warning: move_uploaded_file(): Unable to move (...)
- 第31行是
mkdir($path,0777,true)代码>
- 第75行是移动上传的文件($file\u tmp,$file)代码>
这是我第一次尝试,非常感谢您的帮助。我搜索并尝试了更多。这项工作:
$path = $_SERVER['DOCUMENT_ROOT'] . '/data/uploads/images/' . $folder . "/";
我现在可以将文件上载到此文件夹
谢谢你的帮助!我一定会考虑你的建议(并调整访问权限),因为
PHP
仍然不是我的强项 你能通过ssh连接吗?您很可能需要为公共上传创建一个文件夹,并为您的主机允许web用户(通常是www或www数据)递归地对该文件夹的写入权限指定一个公共组。像chown-R www-data:www-data-images这样的东西我认为他们只为云主机提供ssh。但我可能错了。我从来没有用过ssh。我可以调查一下。按原样,我可以更改Web空间中文件夹的读写执行权限。但即使我允许每个人读写文件,它也不起作用。dir/dir/data/uploads/images/是否在您的公共web根目录中?我只是猜测一下,但是公共用户组只允许上传到公共文件夹。我刚刚注意到的另一件事是:您的图像具有主机可能不允许的扩展名.webp。你试过上传jpg吗?它应该在公共网页根目录下,是的。jpg的错误与此相同。然而,我有一个JavaScript预加载函数,用于在我的头中为图像返回状态代码403禁止
。还有两个.htaccess文件(一个在data文件夹中,一个在uploads中)。我没有写它们,也没有把它们放在那里,对此我不确定,但问题可能与其中一个.htaccess文件有关?我现在才想到这一点。无论如何,我会调查的。