繁体   English   中英

如何使用php将图像上传到服务器上的文件夹目录中

[英]How to Upload images into folder directory on the server using php

我正在尝试将图像上传到服务器。

在服务器上,文件夹名称:{photo}

我检查了该文件夹及其当前在0755上的权限。

当我运行我的PHP代码时,出现以下错误代码:

“上传文件时出错-检查目标位置是否可写。”

与我的问题类似的帖子是: 如何将照片上传到我的托管服务器文件夹目录

但我的代码中已经包含以下功能:

这是我的php代码:

<?php

$filetmp = $_FILES["file_img"]["tmp_name"];
$filename = $_FILES["file_img"]["name"];
$filetype = $_FILES["file_img"]["type"];
$filesize = $_FILES["file_img"]["size"];
$fileinfo = getimagesize($_FILES["file_img"]["tmp_name"]);
$filewidth = $fileinfo[0];
$fileheight = $fileinfo[1];
$filepath = "../photo/".$filename;
$filepath_thumb = "../photo/thumb/".$filename;




if($_POST['btn_upload'])
{
    $sPhotoFileName = $filename;
    $nPhotoSize = $filesize;
    $sTempFileName = $filetmp;
    chmod($filepath_thumb,0755);
    chmod($filepath,0755);

if(file_exists('photo/' . $_FILES['file_img']['name'])){
    die('File with that name already exists.');
}else{

if ($sPhotoFileName) // file uploaded
{   $aFileNameParts = explode(".", $sPhotoFileName);
    $sFileExtension = end($aFileNameParts); // part behind last dot
    if ($sFileExtension != "jpg"
        && $sFileExtension != "png"
        && $sFileExtension != "gif")
    {   die ("Choose a JPG for the photo");
    }
}

if($_FILES['file_img']['error'] > 0){
    die('An error ocurred when uploading.');
}

    if ($nPhotoSize == 0)
    {   die ("Sorry. The upload of $sPhotoFileName has failed.
Search a photo smaller than 300K, using the button.");
    }
    if ($nPhotoSize > 30240000000)
    {   die ("Sorry.
The file $sPhotoFileName is larger than 300K.
Advice: reduce the photo using a drawing tool.");
    }
    // read photo

    $oTempFile = fopen($sTempFileName, "r");
    $sBinaryPhoto = fread($oTempFile, fileSize($sTempFileName));
    // Try to read image
    $nOldErrorReporting = error_reporting(E_ALL & ~(E_WARNING)); // ingore warnings
    $oSourceImage = imagecreatefromstring($sBinaryPhoto); // try to create image
    error_reporting($nOldErrorReporting);
    if (!$oSourceImage) // error, image is not a valid jpg
    { die ("Sorry.
It was not possible to read photo $sPhotoFileName.
Choose another photo in JPG format.");
    }
}
 $nWidth = imagesx($oSourceImage); // get original source image width
        $nHeight = imagesy($oSourceImage); // and height
        // create small thumbnail
        $nDestinationWidth = 80;
        $nDestinationHeight = 60;
    //$oDestinationImage = imagecreatetruecolor($nDestinationWidth, $nDestinationHeight);
        $oDestinationImage = imagecreate($nDestinationWidth, $nDestinationHeight);
    /*$oResult = imagecopyresampled(
        $oDestinationImage, $oSourceImage,
        0, 0, 0, 0,
        $nDestinationWidth, $nDestinationHeight,
        $nWidth, $nHeight); // resize the image
    */
        imagecopyresized($oDestinationImage, $oSourceImage,0, 0, 0, 0,$nDestinationWidth, $nDestinationHeight,$nWidth, $nHeight); // resize the image
        ob_start(); // Start capturing stdout.
        imageJPEG($oDestinationImage); // As though output to browser.
        $sBinaryThumbnail = ob_get_contents(); // the raw jpeg image data.
        ob_end_clean(); // Dump the stdout so it does not screw other output.

    // attempt insert query execution
    $sql = "INSERT INTO UploadImg (img_name, img_path, img_type) VALUES ('$sPhotoFileName', '$filepath', '$filetype')";
        if(mysqli_query($link, $sql)){
                    echo "Records added successfully.";
                } else{
                    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
                }


    if(!move_uploaded_file($_FILES["file_img"]["tmp_name"],"../photo/".$_FILES["file_img"]["name"])){
           die('Error uploading file - check destination is writeable.');
       echo "Error Code: " .$_FILES["file_img"]["name"] . "<br>";
    }else{



    $sBinaryThumbnail = addslashes($sBinaryThumbnail);
    $oDatabase = $link;
    mysqli_select_db("upload", $oDatabase);
    $sQuery = "insert into Uploadimg (thumbnail) VALUES ('$sBinaryThumbnail')";
    echo $sQuery;
    mysqli_query($sQuery, $oDatabase);
    die('File uploaded successfully.');
    mysqli_close($link);

    }
}
    ?>

现在,我读到一篇文章说,即使您的文件夹权限设置为在这三个级别上都可以进行所有三个读,写和执行。 代码仍然无法读取,具体取决于服务器上的设置。

因此,我很困惑,需要澄清。 请帮我吗?

您可以通过编码的二进制数据上传图像,并将图像格式的文件保存在服务器上。

755表示它不是世界可写的。 您可以使用777将其设置为可写和可执行。

这仍然很容易受到攻击,因为任何有权访问您的服务器操作系统的人都可以写入该文件夹,因此您可能应该仅使Web服务器用户成为该文件夹的所有者,并保留当前的权限。 如果您正在运行apache,则用户通常是www-data或apache。

我发现您必须设置GID和UID权限文件权限

设置的组标识GID允许所有者执行所有应用程序以读取,写入和拉出文件夹。

与用户标识UID相同。 问题是您的文件夹将向陌生人开放,但可以使用。

我的图像正在上传到文件夹中。 告诉我你们在想什么?

首先在您的php.ini中放

file_uploads = On 

接下来,创建一个HTML表单,该表单允许用户选择他们要上传的图像文件:

<form action="upload.php" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">

确保表单使用method =“ post”,然后使用下面的php代码上传图片

 <?php $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1; $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); // Check if image file is a actual image or fake image if(isset($_POST["submit"])) { $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); if($check !== false) { echo "File is an image - " . $check["mime"] . "."; $uploadOk = 1; } else { echo "File is not an image."; $uploadOk = 0; } } ?> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM