【问题标题】:403 Forbidden on php mkdir403 禁止在 php mkdir 上
【发布时间】:2012-06-28 01:55:24
【问题描述】:

使用 mkdir 函数执行 php 脚本时出现 403 禁止页面。

这里是 mkdir 代码:

mkdir('uploads/'.$upload_folder.'/', 777)

我尝试了775、666权限,但没有。 在我想存储图像、mp3 和视频的目录中。 谁能帮帮我?

更新 1

这是整个脚本:

$folderStr = $_REQUEST['folderName'];

//create SEO firndly directory name
$upload_folder =    preg_replace("'\s+'", '-', $folderStr);

// The place the files will be uploaded to (currently a 'files' directory).
$upload_path = 'uploads/'.$upload_folder.'/';

//Check whether folder exists or create with the name supplied
if(is_dir($upload_folder))
echo 'directory exists';
else
mkdir('uploads/'.$upload_folder.'/', 777);

它应该在“上传”文件夹中创建一个新目录,其名称从我从那里获取的表单中给出,值为“folderName”,并将表单中给出的文件上传到创建的新目录中. 它也不能在文件夹名称上写希腊字符。我必须改变什么才能让它工作?

【问题讨论】:

  • 403 表示您无权通过网络访问脚本,而不是您无权创建目录
  • 我在我的电脑上本地运行它。
  • 我们不能说没有更多细节。 PHP 脚本是否位于您已经有其他脚本工作的目录中?它是否具有使 Web 服务器用户可读的文件权限?
  • 在同一个文件夹中,我拥有和其他脚本,是的,它们工作正常。怎么给它权限?
  • 让您的脚本工作的最简单方法可能是将同一组分配给 $upload_folder 和您的网络服务器,并将 $upload_folder 的权限设置为“组可写”。

标签: php


【解决方案1】:

您需要在所需模式前面加一个零,例如

mkdir('uploads/'.$upload_folder.'/', 0777)

如果你使用'777',你会得到类似这样的奇怪权限:

dr----x--t

而不是这个:

drwxrwxr-x

原因(来自PHP chmod docs):“请注意,模式不会自动假定为八进制值,因此为确保预期的操作,您需要在模式前加上零(0 )。”

我可以确认这仍然发生在 PHP 7.0.3 中,尽管相关 changes to integer handling:“以前,包含无效数字的八进制文字被静默截断(0128 被视为 012)。现在,无效的八进制文字将导致解析错误。”

然而 0777 无论如何都是默认值,它提供了尽可能广泛的访问权限,因此您不需要指定它,除非您想设置任何以后的参数(例如,通常设置第三个参数很有用true 选项以启用递归目录的创建,而不是在父级不存在时创建错误。)

【讨论】:

    猜你喜欢
    • 2020-09-07
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 2013-05-30
    • 2011-09-08
    • 2017-10-06
    相关资源
    最近更新 更多