【问题标题】:png format images are not stored in my server [closed]png 格式的图像未存储在我的服务器中[关闭]
【发布时间】:2025-12-05 13:05:01
【问题描述】:

我使用 php 脚本将图像上传到我的服务器。我只能将 jpeg 格式的图像添加到我的服务器。
我无法将 png 格式的图像添加到我的服务器。我没有在我的脚本中使用任何条件。它可以是所有类型的图像。任何人都可以帮助我。这是我使用的代码。文件来自另一个页面。值通过 jquery 访问此页面。 其中 c3 是文本框名称

$file_name1 = dirname($_SERVER['DOCUMENT_ROOT']).'/CDN/image/'.$t."1".substr($_REQUEST['c3'],strlen($_REQUEST['c3'])-4,strlen($_REQUEST['c3']));
file_put_contents($file_name1,base64_decode( str_replace('data:image/jpeg;base64,', '',$_REQUEST['c13'])));
mysql_query("INSERT INTO `table_name` VALUES ('','".$_REQUEST['c1']."','".$_REQUEST['c5']."','".$_REQUEST['c6']."','".$t."1".substr($_REQUEST['c3'],strlen($_REQUEST['c3'])-4,strlen($_REQUEST['c3']))."','".$_REQUEST['c27']."','".$_REQUEST['c28']."','".$_REQUEST['c25']."','".$_REQUEST['c26']."','".$_REQUEST['c11']."','".$_REQUEST['c12']."',NOW())"); 

感谢您的回复。我得到了答复。我使用此代码:

if(strpos($_REQUEST['c13'],'jpeg') !== false ) {
file_put_contents($file_name1,base64_decode( str_replace('data:image/jpeg;base64,', '',$_REQUEST['c13'])));
}
elseif(strpos($_REQUEST['c13'],'png') !== false ) {
file_put_contents($file_name1,base64_decode( str_replace('data:image/png;base64,', '',$_REQUEST['c13'])));
}

【问题讨论】:

  • 能贴出相关代码吗?您是否尝试在将图像存储到硬盘驱动器之前对其进行处理?如果是,您使用的是什么库?并且您支持 png 文件吗?您是否尝试过使用不同的文件,例如 .txt、.mp3 等?您尝试的 .png 文件是否比 jpg 更重(更多 Kb)?文件的大小(Kb)是多少?您现在的上传限制是多少?
  • 哇,刚看到代码的时候还以为格式有问题,但是没有,是你写的方式。这是我最近见过的最复杂的代码之一。
  • 如何在这一行添加 png 格式 base64_decode( str_replace('data:image/jpeg;base64,', '',$_REQUEST['c13']))

标签: php apache image-processing


【解决方案1】:

我试图让你的代码更清晰一些,并帮助你找到你的代码发生了什么,使用 var_dump() 来查看值。

当然所有的 $_REQUEST 和 $_SERVER 都应该是正确的。

    // initialize variables
    $file_name1 = false;
    $document_root = false;
    $request_c3_len = false;
    $fragment = false;
    $mime = false;

    // check what information is available
    if ( isset( $_SERVER['DOCUMENT_ROOT'] ) !== false ) {
        $document_root = dirname( $_SERVER['DOCUMENT_ROOT'] );
    }
    if ( isset( $_REQUEST['c3'] ) !== false ) {
        $request_c3_len = strlen( $_REQUEST['c3'] );
        $fragment = substr( $_REQUEST['c3'],( $request_c3_len - 4 ), $request_c3_len );
    }

    if ( ( $document_root !== false ) && ( $fragment !== false ) ) {
        $file_name1 = $document_root.'/CDN/image/'.$t."1".$fragment;
    }
// var_dump( $file_name1 );
// exit( __FILE__.' '.__LINE__ );



    // work only if necessary
    if ( ( $file_name1 !== false ) && ( isset( $_REQUEST['c13'] ) !== false ) ) {
        $mime = str_replace( 'data:image/jpeg;base64,', '',$_REQUEST['c13'] );
// var_dump( $mime );
// exit( __FILE__.' '.__LINE__ );       
        file_put_contents( $file_name1, base64_decode( $mime ) );
    }

在每个步骤中检查您是否拥有预期的信息。

【讨论】:

  • 感谢您的回复。实际上我的问题是我无法添加 png 文件,因为我只检查“data:image/jpeg;base64”。现在我添加另一个检查 png 的代码。我的答案如上所示。
最近更新 更多