PHP file_put_contents:无法打开流:权限被拒绝

问题描述 投票:0回答:1

我想使用 php 存储图像,所以我使用以下代码:

$encodedCard = isset($_POST["card"]) ? $_POST["card"] : null;
        $name = isset($_POST["fn"]) ? $_POST["fn"] : null;
        $card = base64_decode($encodedCard,true);
        $completePath = '/home/user/cards/' . $name . '.png';
        if (file_put_contents($completePath, $card) !== false) {
            echo "success";
        } else {
            $lastError = error_get_last();
            echo "Error writing to file: " . $lastError['message'];
        }

我已经检查代码在

if
语句之前是否正常工作。

我收到以下错误:

Error writing to file: file_put_contents(/home/user/cards/image_name.png): Failed to open stream: Permission denied

打开我的 Aapche2 error.log 后,我有以下内容:

PHP Warning:  file_put_contents(/home/user/cards/image_name.png): Failed to open stream: Permission denied in /path/to/the/php/file.php on line 5

我尝试更改目录的权限,但没有任何效果,我尝试的更改是:

## did not work
chmod -R 755 /home/user/cards/
## did not work
chown -R www-data:www-data /home/user/cards/
## did not work
chmod -R 777 /home/user/cards/

如果有帮助的话,我在 Ubuntu 22.04.03 LTS 机器上使用 Apache2 作为服务器。

如有任何帮助,请提前致谢。

php apache
1个回答
0
投票

您可以按照以下步骤解决使用 PHP 存储图片时权限被拒绝的问题:

$encodedCard = isset($_POST["card"]) ? $_POST["card"] : null;
$name = isset($_POST["fn"]) ? $_POST["fn"] : null;
$card = base64_decode($encodedCard,true);
$completePath = '/home/user/cards/' . $name . '.png';

// Check if the directory exists, if not create it
if (!is_dir('/home/user/cards/')) {
    mkdir('/home/user/cards/', 0755, true);
}

if (file_put_contents($completePath, $card) !== false) {
    echo "success";
} else {
    $lastError = error_get_last();
    echo "Error writing to file: " . $lastError['message'];
}

确保将

'user'
替换为路径中的实际用户名
(/home/user/cards/)

  1. 检查目录是否存在,如果不存在,则创建具有权限的目录
    0755
  2. 尝试使用
    file_put_contents
    写入图像文件。

注意:请注意,虽然此方法可能有助于解决权限问题,但解决任何潜在的安全问题也很重要,例如验证用户输入并确保只有授权用户才能将文件上传到您的服务器。

#阿帕奇时代

© www.soinside.com 2019 - 2024. All rights reserved.