存储在本地文件夹中的条形码图像不起作用

时间:2012-08-29 09:07:32

标签: php barcode

我在我的网站上使用条形码生成。当我在HTML标签中使用它时它工作正常。

<div class="barcode_img"><img src="<?php echo AT::getUrl(); ?>/barcode/image.php?code=code39&o=1&dpi=150&t=30&r=1&rot=0&text=TEST NAME WITH SPACE&f1=Arial.ttf&f2=10&a1=&a2=&a3=" class="barcode fr"/></div>  

我需要将该图像存储在名为“media / barcode /”的本地文件夹中。为此,我使用了以下代码:

$valid_barcodename="testimage";
$barcodeurl = AT::getUrl() . "barcode/image.php?code=code39&o=1&dpi=150&t=30&r=1&rot=0&text=TEST NAME WITH SPACE&f1=Arial.ttf&f2=10&a1=&a2=&a3=";
        $barcode_img = 'media/barcode/testing_' .$valid_barcodename . '.png';
        file_put_contents($barcode_img, file_get_contents($barcodeurl));

存储在该文件夹中的图像不为空。当我分析它时,我发现,如果我给出名称“TEST NAME WITH SPACE”而没有空格(TESTNAMEWITHSPACE),它就可以了。

但是,如果我用空间给它,它将无法工作。有什么问题?

注意:AT :: getUrl() - 用于获取我的基本URL。

2 个答案:

答案 0 :(得分:2)

空间在URL中具有特殊含义,因此您必须对它们进行编码:

$text = urlencode("TEST NAME WITH SPACE")
$barcodeurl = AT::getUrl() . "barcode/image.php?code=code39&o=1&dpi=150&t=30&r=1&rot=0&text=". $text ."&f1=Arial.ttf&f2=10&a1=&a2=&a3=";

在上面的代码中,$text现在包含您的文字,已编码并可以在您的网址中使用(您会注意到空格已被%20代码替换)。

答案 1 :(得分:1)

  

注意:如果要打开带有特殊字符的URI,例如空格,   你需要用urlencode()编码URI。

http://docs.php.net/file_get_contents

或者,如果在服务器上启用了cURL,则可以使用cURL。

function curl($url, $setopt = array(), $post = array())
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
    if( ! empty($post))
    {
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
    }
    if( ! empty($setopt))
    {
        foreach($setopt as $key => $value)
        {
            curl_setopt($curl, constant($key), $value);   
        }
    }
    $data = curl_exec($curl);
    curl_close($curl);
    return $data;
}

用法:

file_put_contents($barcode_img, curl($barcodeurl));