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)
我找到了几个针对Linux文件系统的修复程序。但在使用共享主机时,我如何才能做到这一点?


这是我第一次尝试,非常感谢您的帮助。

我搜索并尝试了更多。这项工作:

 $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文件有关?我现在才想到这一点。无论如何,我会调查的。