Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用URL的str_替换进行base64图像转换_Php_Image_Base64 - Fatal编程技术网

Php 使用URL的str_替换进行base64图像转换

Php 使用URL的str_替换进行base64图像转换,php,image,base64,Php,Image,Base64,我在一些PHP代码中遇到了一个问题,我想我知道这个问题,但对我来说仍然很奇怪。基本上,我的最终目标是将大量图像写入base64 这里是链接到问题中的。最底层的函数base64_encode_image是我编写的新函数。obcallbackreplace有一段代码,可以查找和替换字符串[themedir],等等。这几乎就像它不知道该做什么,也不给出响应一样。我觉得我在某个地方有个逻辑错误,但就是看不出来 要转换为base64映像的函数: function base64_encode_image($

我在一些PHP代码中遇到了一个问题,我想我知道这个问题,但对我来说仍然很奇怪。基本上,我的最终目标是将大量图像写入base64

这里是链接到问题中的。最底层的函数base64_encode_image是我编写的新函数。obcallbackreplace有一段代码,可以查找和替换字符串[themedir],等等。这几乎就像它不知道该做什么,也不给出响应一样。我觉得我在某个地方有个逻辑错误,但就是看不出来

要转换为base64映像的函数:

function base64_encode_image($imageurl, $filetype, $curlopt=array()) {
isset($response) ? $response = '' : $response = '';
$ch = curl_init();
$default_curlopt = array(
    CURLOPT_TIMEOUT => 2,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_FOLLOWLOCATION => 1,
    CURLOPT_USERAGENT => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko/20101203 AlexaToolbar/alxf-1.54 Firefox/3.6.13 GTB7.1"
);
$curlopt = array(CURLOPT_URL => $imageurl) + $curlopt + $default_curlopt;
curl_setopt_array($ch, $curlopt);
$image = curl_exec($ch);
if($response === false){
    trigger_error(curl_error($ch));
}
curl_close($ch);

$base64 = 'data:image/png;base64,' . base64_encode($image);
return $base64;
}
字符串查找并替换为URL的缩写函数:

function obcallbackreplace($buffer) {
global $cfg;
$themename = get_site_config("name=theme");
$themedir = $cfg["baseurl"]."plugins/site/themes/".$themename."/";
$buffer = str_replace('[themedir]', $themedir, $buffer);
return $buffer;
}
我应该可以这样做,它应该工作。。。但事实并非如此

<img src="<?php echo base64_encode_image('[themedir]images/logo.png','png')" />
输出为请注意,$image未被传递:

<img src="data:image/png;base64,"/>
我得到:

<img src="data%3Aimage%2Fpng%3Bbase64%2C" />

所以问题是obcallbackreplace在base64_encode_image之后运行,所以您没有处理参数$imageurl。行$curlopt=arrayCURLOPT_URL=>$imageurl。。。使用上面测试1中的url[themedir]images/logo.png运行,该url无效

在将$imageurl变量添加到Curl选项之前,需要解析[themedir]。像这样的方法应该会奏效:

$default_curlopt = array(...);
global $cfg;
$themename = get_site_config("name=theme");
$themedir = $cfg["baseurl"]."plugins/site/themes/".$themename."/";
$imageurl = str_replace('[themedir]', $themedir, $imageurl);
$curlopt = array(CURLOPT_URL => $imageurl) + $curlopt + $default_curlopt;

这是有道理的。如果我添加了URL编码,我可以看到[themedir]被拾取,而不是URL,但是——出于某种原因——我完全错过了在base64函数之后调用obcallbackreplace的过程。谢谢
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZA />
return 'data:image/png;base64,' . base64_encode($image);
<img src="data:image/png;base64,"/>
$base64 = 'data:image/png;base64,' . base64_encode($image);
$base64 = urlencode($base64);
$base64 = htmlspecialchars($base64);
return $base64;
<img src="data%3Aimage%2Fpng%3Bbase64%2C" />
$default_curlopt = array(...);
global $cfg;
$themename = get_site_config("name=theme");
$themedir = $cfg["baseurl"]."plugins/site/themes/".$themename."/";
$imageurl = str_replace('[themedir]', $themedir, $imageurl);
$curlopt = array(CURLOPT_URL => $imageurl) + $curlopt + $default_curlopt;