当前位置: 首页 > 知识库问答 >
问题:

在PHP中使用fopen而不使用try/catch时,如何捕获“权限被拒绝”错误?

焦正德
2023-03-14

我刚刚收到一个脚本的错误报告,当脚本尝试使用“w”(写入)模式打开新文件时,出现了权限拒绝错误。以下是相关函数:

function writePage($filename, $contents) {
    $tempfile = tempnam('res/', TINYIB_BOARD . 'tmp'); /* Create the temporary file */
    $fp = fopen($tempfile, 'w');
    fwrite($fp, $contents);
    fclose($fp);
    /* If we aren't able to use the rename function, try the alternate method */
    if (!@rename($tempfile, $filename)) {
        copy($tempfile, $filename);
        unlink($tempfile);
    }

    chmod($filename, 0664); /* it was created 0600 */
}

你可以看到第三行是我使用fopen的地方。我想捕捉权限被拒绝的错误并自己处理它们,而不是打印一条错误消息。我意识到使用try/catch块很容易做到这一点,但是可移植性是我的脚本的一大卖点。我不能牺牲与PHP 4的兼容性来处理一个错误。请帮助我捕捉权限错误,而不打印任何错误/警告。

共有1个答案

戚修雅
2023-03-14

我认为您可以通过使用此解决方案来防止错误。只需在tempnam行之后添加额外的检查

$tempfile = tempnam('res/', TINYIB_BOARD . 'tmp'); 

# Since we get the actual file name we can check to see if it is writable or not
if (!is_writable($tempfile)) {
    # your logic to log the errors

    return;
}

/* Create the temporary file */
$fp = fopen($tempfile, 'w');
 类似资料:
  • 我有一个问题与PHP脚本在我的网络服务器(Apache/2.4.10在Raspbian),我不能生成一个新的文件。我试过chmod 777(这是非常糟糕的做法),但它仍然不起作用。我已经为此挣扎了几天,即使经过广泛的研究,我也找不到解决这个问题的方法。下面是我的代码和它产生的错误消息: 警告:fopen(newfile.txt):无法打开流:第4行 /var/www/html/handlers/w

  • 我是PHP新手。我计划根据用户输入创建文件夹、子文件夹。 文件夹和子文件夹已成功创建。 最后我尝试创建一个文件,它显示以下错误。 fopen(upload/llocalhost/hrms):无法打开流:在C:\xamp\htdocs\ssspider\index中的权限被拒绝。php第205行 我的代码是: 请帮我找出我的问题? 编辑:谢谢。我出错了。以前我没有提到文件名。现在工作正常。谢谢

  • 问题内容: 我尝试在Ubuntu计算机上的虚拟环境中部署Python软件包,但是遇到与权限相关的问题。例如: 终止于: 错误:无法创建’/home/test/virtualenvs/TestVirtualEnv/lib/python3.3/site- packages/markdown2.py’:权限被拒绝 我不能,因为它将在全球范围内安装该软件包,而不是在虚拟环境中安装。我吃过; 只显示目录有关

  • 我在Macbook pro osx 10.9 Firefox浏览器上使用XAMP 1.7.3 基本上,我正在尝试编写一个代码,要求用户输入一些信息,然后使用以下方法将信息存储在.txt文件中: 但是我一直收到这个错误消息: 警告:fopen(registration.txt) [function.fopen]:无法打开流:第 30 行的 /Applications/XAMPP/xamppfiles

  • 我该怎么修复它有什么想法吗?

  • 问题内容: 我有两个Docker容器:Nginx和App。 该应用程序容器扩展了PHP-fpm,并具有我的Laravel代码。 在我的工作中: 在我的Nginx Dockerfile中,我正在做: 在我的App Dockerfile中,我正在做: 成功运行docker-compose up后,尝试localhost时出现以下错误 流或文件“ /var/www/storage/logs/larave