【问题标题】:failed to open stream: Permission denied [upload photo]无法打开流:权限被拒绝 [上传照片]
【发布时间】:2016-01-12 00:25:33
【问题描述】:

目前使用macbook + apache + phpmyadmin + php + xampp。 (在本地主机上运行)

我正在尝试通过 php 将照片上传到其中一个文件夹中,但我收到了此警告。

有没有办法通过macbook文件设置解决这个问题?

警告:file_put_contents(image/img_post720151014060113101414.jpg):无法打开流:/Applications/XAMPP/xamppfiles/htdocs/CS2102/signup.php 第 32 行中的权限被拒绝 无法执行查询。

代码:

include("db.php");

$userEmail = $_POST["userEmail"];
$firstName= $_POST["firstName"];
$lastName = $_POST["lastName"];
$userPassword = $_POST["userPassword"];
$nationality = $_POST["nationality"];
$birthday = $_POST["birthday"];
$gender = $_POST["gender"];

// prepare the image for insertion
$imgData =addslashes (file_get_contents($_FILES['test']['tmp_name']));
$bio = $_POST["bio"];

$filename = "img_post" . rand(1, 9) . date("YmdHis") . rand(25, 125) . rand(256, 850);
$allowed  = array(
    "image/jpeg",
    "image/pjpeg",
    "image/jpg",
    "image/png",
    "image/JPEG",
    "image/bmp",
    "image/PNG"
);

$result= UploadFile("test", $allowed, 10000000);
            if ($result[0] == 0) {
                // Put Photo uploaded into sever folder
                file_put_contents("image/" . $filename . ".jpg", $result[2]);
                $date  = (String) date("Y-M-d-H:i:s");

                // Query String
                $query = "INSERT INTO `user` (`userEmail`,`password`, `firstName`,  `lastName`,  `nationality`,`birthday`,`gender`,`picSrc`,`bio`) VALUES ('$userEmail','$password','$firstName','$lastName','$nationality','$birthday','$gender', '{$imgData}', '$bio')";  
                // Execute Query
                mysqli_query($mysqli,$query) or die("couldn't execute query.");
                echo '<script language="javascript">';
                echo 'alert("Photo Uploaded");';
                echo 'window.location.href="loginreg.php";';
            } else {
                if ($result[0] == "-1")
                    echo "wrong";
                if ($result[0] == "-2")
                    echo "wrong file type";
                if ($result[0] == "-3")
                    echo "MAximum length exceeded";
                if ($result[0] > 0)
                    echo "Error due to $result";
                echo $result[0];
                echo $result;
                echo "<br/>File Upload Error!";

            }


function UploadFile($name, $filetype, $maxlen)
{
    if (!isset($_FILES[$name]['name']))
        return array(
            -1,
            NULL,
            NULL
        );
    if (!isset($_FILES[$name]['type'], $filetype))
        return array(
            -2,
            NULL,
            NULL
        );
    if ($_FILES[$name]['size'] > $maxlen)
        return array(
            -3,
            NULL,
            NULL
        );
    if ($_FILES[$name]['error'] > 0)
        return array(
            $_FILES[$name]['error'],
            NULL,
            NULL
        );

    $temp = file_get_contents($_FILES[$name]['tmp_name']);
    return array(
        0,
        $_FILES[$name]['type'],
        $temp
    );
}


?>

【问题讨论】:

  • 如果您包含 signup.php 的第 32 行(甚至更多)可能会有所帮助。
  • 请添加您的代码。

标签: php apache xampp


【解决方案1】:

你需要指定一个可写的目录。

在这种情况下:

// set BASE_DIR constant for later convenience
define('BASE_DIR', dirname(__FILE__).'/');

// specify filedir/filename you want to write to
$file = BASE_DIR.'image/'.$filename.'.jpg';

// write content to file
file_put_contents($file, $result[2]);

如果这不起作用,您必须转到命令行并运行:

chmod 0777 <path-to-web-folder>/image/

【讨论】:

    【解决方案2】:

    我通过更改我想上传给每个人读+写的文件夹的设置解决了这个问题。我确信这不是最安全的方法。但我正在做本地主机测试。所以我想这足以解决问题,所以我可以继续下一部分。

    不过,谢谢大家的帮助^^ =)。

    【讨论】:

    • 是的;如何保护生产服务器上的文件夹将取决于生产服务器的设置方式。运行执行您的代码的 php 进程的用户将需要写入目录的权限,但这是您的应用程序的特定用户还是更一般的 Web 服务器用户(例如“apache”)将取决于 Web 的详细信息服务器配置。为了便于在本地机器上进行开发,将上传目录设置为可写是很正常的。
    【解决方案3】:

    使用终端转到您的应用程序目录并找到“图像”目录。

    然后在图像目录上尝试这个命令(你需要在拥有图像目录的目录中):

    chown -R _www image
    chmod 755 image
    

    _www 是 mac os 上的默认 apache 用户

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      • 2011-06-22
      • 2015-12-16
      • 2015-11-15
      • 2017-09-23
      • 2015-02-01
      • 2014-11-29
      相关资源
      最近更新 更多