【问题标题】:Image is Not Saving in upload folder [duplicate]图片未保存在上传文件夹中[重复]
【发布时间】:2013-02-14 14:49:37
【问题描述】:

我正在尝试将不同类别的图像保存在一个文件夹中并检索它们..当我保存图像时,水印会自动应用于图像.. 为此我正在使用。

  <?php
    if(isset($_POST['submit'])){
     $cat=$_POST['cat'];

    $fname= $_FILES["file"]["name"];
    "Type: " . $_FILES["file"]["type"] . "<br />";
    "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    "stored in: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
       "Stored in: " . "upload/" . $_FILES["file"]["name"];
     echo 'image Save Successfully' ;   

    require_once( "watermark.php" );


    $original_directory = "upload/";
    $watermarked_images = "temp/";

    if ($handle = opendir($original_directory)) 
    {
        while (false !== ($file = readdir($handle))) 
        {

            if(!is_file($original_directory.$file))
                continue;
            if(exif_imagetype($original_directory.$file)==2)
            {
                watermark($original_directory.$file,"watermark.png",$watermarked_images.$file);
                //echo "Done watermarking <b>".$file."</b><br>\n";
            }
        }
        closedir($handle);
    }
    }
   }
   ?> 

而 watermark.php 是

     <?php
     function watermark($original_image,$original_watermark,$destination="")
        {
            $image=imagecreatefromjpeg($original_image);
            list($imagewidth,$imageheight)=getimagesize($original_image);

            $watermark  =   imagecreatefrompng($original_watermark);            
            list($watermarkwidth,$watermarkheight)=getimagesize($original_watermark);

            if($watermarkwidth>$imagewidth || $watermarkheight>$imageheight)
            {
                $water_resize_factor = $imagewidth / $watermarkwidth;
                $new_watermarkwidth  = $watermarkwidth * $water_resize_factor;
                $new_watermarkheight = $watermarkheight * $water_resize_factor;

                $new_watermark = imagecreatetruecolor($new_watermarkwidth , $new_watermarkheight);

                imagealphablending($new_watermark , false);
                imagecopyresampled($new_watermark , $watermark, 0, 0, 0, 0, $new_watermarkwidth, $new_watermarkheight, $watermarkwidth, $watermarkheight);

                $watermarkwidth  = $new_watermarkwidth; 
                $watermarkheight = $new_watermarkheight; 
                $watermark       = $new_watermark;
            }
            $startwidth     =   ($imagewidth    -   $watermarkwidth)  / 2; 
            $startheight    =   ($imageheight   -   $watermarkheight) / 2;

            imagecopy($image, $watermark, $startwidth, $startheight, 0, 0, $watermarkwidth, $watermarkheight); 
            if(!empty($destination))
                imagejpeg($image,$destination);
            else 
                imagejpeg($image);
        }   
?>

一些图像保存在上传文件夹和临时文件夹和数据库中,并且在它们上应用了水印..但是现在当我尝试上传图像时..它只在上传文件夹中并且显示致命错误:-

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 15000 bytes) in D:\xampp\htdocs\looks\admin\watermark.php on line 28

我该如何解决这个.. 并且.PNG图像也没有保存

【问题讨论】:

  • 更改php.ini文件上传大小限制
  • 你应该修改你的 php.ini 来解决这个问题
  • 我在 xampp 中找到 php.ini 的位置,以及当我将这个项目上传到服务器时,我在 cpanel 中做了哪些更改。
  • 去你的图标托盘,点击xampp图标然后移动到php..你可以看到php.ini选项或者去c:/xampp并在php文件夹中搜索php.ini

标签: php image-uploading watermark


【解决方案1】:

在服务器上传时可能会产生问题。您可以使用

    <?php
function watermarkImage ($SourceFile, $WaterMarkText, $DestinationFile) { 
   list($width, $height) = getimagesize($SourceFile);
   $image_p = imagecreatetruecolor($width, $height);
   $image = imagecreatefromjpeg($SourceFile);
   imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width, $height); 
   $black = imagecolorallocate($image_p, 0, 0, 0);
   $font = 'arial.ttf';
   $font_size = 10; 
   imagettftext($image_p, $font_size, 0, 10, 20, $black, $font, $WaterMarkText);
   if ($DestinationFile<>'') {
      imagejpeg ($image_p, $DestinationFile, 100); 
   } else {
      header('Content-Type: image/jpeg');
      imagejpeg($image_p, null, 100);
   };
   imagedestroy($image); 
   imagedestroy($image_p); 
};
?>

您需要下载 arial.ttf 文件并将其上传到您的服务器上。然后创建一个新的 PHP 文件并将上面的函数复制并粘贴到其中。接下来的 4 行用于设置源文件、水印文本消息和目标文件。如果您只想显示带水印的图像,则需要将 $DestinationFile 变量留空($DestinationFile=''; )。另外请确保源文件和目标文件包含完整的服务器路径和图像文件名。如果要更改图像上水印消息的位置,可以更改该行 imagettftext($image_p, $font_size, 0, 10, 20, $black, $font, $WaterMarkText);

    <?php
$SourceFile = '/home/user/www/images/image1.jpg';
$DestinationFile = '/home/user/www/images/image1-watermark.jpg'; 
$WaterMarkText = 'Copyright phpJabbers.com';
watermarkImage ($SourceFile, $WaterMarkText, $DestinationFile);
?>

【讨论】:

    【解决方案2】:

    这意味着当前的 RAM 限制不足以让您的 PHP 脚本生成水印。

    转到您的 php.ini,找到“memory_limit”并将该行更改为类似的内容:

    memory_limit = 256M;
    

    之后,重新启动您的 Apache。

    【讨论】:

    • 我在 xampp 中找到 php.ini 的位置,以及当我将这个项目上传到服务器时,我在 cpanel 中做了哪些更改。
    • @omnath,创建一些空的 php 文件,在那里写“echo phpinfo();”。寻找php.ini,你会看到准确的位置。
    • 但是如果您使用的是共享主机,更改php配置可能会出现问题。有关此问题,请联系您的托管支持。
    • 我正在使用 ini_set('memory_limit', '-1');这是正确的方法吗?并且没有显示错误,但我无法保存 png 文件。我为此做了哪些更改。
    • 在您的环境中允许使用 ini_set 之前是正确的。如果错误消失了,那么它正在工作。如果您无法保存 png 文件,也许您没有权限?它可以在您的本地服务器上运行吗?
    猜你喜欢
    • 2017-10-05
    • 1970-01-01
    • 2017-11-07
    • 2016-12-20
    • 2014-02-19
    • 1970-01-01
    • 2021-10-24
    • 2020-05-20
    • 1970-01-01
    相关资源
    最近更新 更多