簡體   English   中英

Codeigniter file_put_contents:未能打開 stream:權限被拒絕

[英]Codeigniter file_put_contents: failed to open stream: Permission denied

在服務器中上傳圖像時,我在 codeigniter 中遇到錯誤。 但它在本地系統中運行良好。

遇到 PHP 錯誤:

Severity: Warning

Message: file_put_contents(upload/logo/1617000545.png): failed to open stream: Permission denied

Filename: models/Logo_m.php

行號:41

    list($type, $data) = explode(';', $data);
        list(, $data) = explode(',', $data);
       
        $data = base64_decode($data);
        $imageName = time().'.png';

        file_put_contents('upload/logo/'.$imageName, $data);````

您是否檢查過您的目錄或權限?

一些問題可能導致:

  1. 目錄不存在,您必須先創建它。
  2. Permissions/Script 沒有足夠的權限來寫文件,你必須驗證應用程序可以寫目錄並且目錄是可寫的。

您的代碼也不會驗證圖像內容/元數據;

// $data = trim(explode(',', explode(';', $data)[1])[1]);
list($type, $data) = explode(';', $data);
list(, $data) = explode(',', $data);
$data = base64_decode($data);
// determine absolute path
$imageDirectory = __DIR__ .'/upload/logo';
// check if string / content is an image
if (! ($imgInfo = getimagesizefromstring($data))) {
    // do exit here because data is not a binary image string
    throw new Exception('Data is not an image');
}
// check if image directory exist
if (!file_exists($imageDirectory)) {
    mkdir($imageDirectory, 755, true);
}
if (!is_dir($imageDirectory) || !is_writable($imageDirectory)) {
    throw new Exception('Could not save image. Directory is not writable.');
}

$extension = $imgInfo['mime'];
// optional to filter jpeg image
if ($extension  === 'jpeg') {
    $extension = 'jpg';
}
// use only time is not recommended due time is not unique, please change with random value
$baseName = time();
$imageName = $baseName . '.' . $extension;
$written   = file_put_contents($imageDirectory.'/'.$imageName, $data);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM