Php base64_encode返回字符串前的空格

Php base64_encode返回字符串前的空格,php,base64,Php,Base64,我正在使用一个名为ViaPost的网站为我的公司寄信。我正在使用SoapClient。上载的文件必须为Base64二进制格式。我使用下面的代码,但是返回空 $pdf_data = file_get_contents('test.pdf'); $pdf_data = base64_encode($pdf_data); print $pdf_data; 要扩展上述内容,请执行以下操作: POST /viapostcustomer.asmx HTTP/1.1

我正在使用一个名为ViaPost的网站为我的公司寄信。我正在使用SoapClient。上载的文件必须为Base64二进制格式。我使用下面的代码,但是返回空

    $pdf_data = file_get_contents('test.pdf'); 
    $pdf_data = base64_encode($pdf_data);
    print $pdf_data;
要扩展上述内容,请执行以下操作:

    POST /viapostcustomer.asmx HTTP/1.1
    Host: api.viapost.com
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    SOAPAction: "http://api.viapost.com/CreateLetter"





    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <CreateLetter xmlns="http://api.viapost.com">
          <loginToken>string</loginToken>
          <name>string</name>
          <description>string</description>
          <FileContents>base64Binary</FileContents>
          <dynamic>boolean</dynamic>
          <shareLetterWithGroup>boolean</shareLetterWithGroup>
          <returnMessage>string</returnMessage>
          <letterID>long</letterID>
        </CreateLetter>
      </soap:Body>
    </soap:Envelope>


    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=utf-8
    Content-Length: length

    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <CreateLetterResponse xmlns="http://api.viapost.com">
          <CreateLetterResult>boolean</CreateLetterResult>
          <returnMessage>string</returnMessage>
          <letterID>long</letterID>
        </CreateLetterResponse>
      </soap:Body>
    </soap:Envelope>


    <?php
    $client = new SoapClient("http://api.viapost.com/viapostcustomer.asmx?WSDL");
    $params = array('sUserName'=>'USERNAME','sPassword'=>'PASSWORD','sLoginToken'=>'','sReturnMessage'=>'');
    $SignIn = $client->__soapCall('SignIn', array($params));
    $sLoginToken = $SignIn->sLoginToken;


    $pdf_data = file_get_contents('test.pdf');
    $pdf_data = base64_encode($pdf_data);
    $params = array('loginToken'=>$sLoginToken,'name'=>'testname','description'=>'testdescription','fileContents'=>$pdf_data,'dynamic'=>'true','shareLetterWithGroup'=>'false','returnMessage'=>'','letterID'=>'');
    $CreateLetter = $client->__soapCall('CreateLetter', array($params));
    $returnMessage = $CreateLetter->returnMessage;
    print $returnMessage;


    ?>
POST/viapostcustomer.asmx HTTP/1.1
主持人:api.viapost.com
内容类型:text/xml;字符集=utf-8
内容长度:长度
SOAPAction:“http://api.viapost.com/CreateLetter"
一串
一串
一串
Base64二进制
布尔值
布尔值
一串
长的
HTTP/1.1200ok
内容类型:text/xml;字符集=utf-8
内容长度:长度
布尔值
一串
长的
它返回:保存文件时出现问题。请再试一次


我做了一些愚蠢的事情。如果传递的参数本身为空,则base64_encode将返回空字符串。在将数据传递到此函数之前,应检查此项

if(strlen($pdf_data)>0){
   $pdf_data = base64_encode($pdf_data);
}else{
   throw new Exception("Empty File provided");
}

尝试增加错误报告,对失败的奇怪检查也不会有什么坏处。这应该会有帮助。:)


是否
$pdf\u数据
为空?(是否
file\u获取内容('test.pdf');
返回有效数据?)在base64\u编码之前有$pdf\u数据变量内容?是的。这是我不明白的。我承认我以前从未使用过这两个命令中的任何一个。base64_编码是否可打印?感谢回复:什么是
var\u转储(realpath('test.pdf'))
output?我已经完成了var\u转储,文件是正确的。我已经到了这样一个阶段,我现在有了一个可读的字符串,但是这个字符串前面至少有300个空白字符。soap返回。。。保存文件时出现问题。请再试一次。好的,谢谢你的代码。出于某种原因,打印数据前面有很多空白。我本来以为屏幕上全是代码,结果却只有一行300个空白字符。这正常吗?文件不是空的,我的错误是输出前有数百个空格。我不明白?当然base64_编码应该从字符1开始。这些空行是由这个print语句上面的代码生成的。显示您的完整代码,希望我们能解决它。谢谢。我添加了我的代码。我对文件进行编码,然后解码,它会正常返回。开始怀疑它之前是否有空白。但是SOAP响应仍然失败。我尝试了其他对ViaPost的SOAP调用,它们都很有效。这就是我研究编码的主要原因。你的文件是否包含那些SOAP头和响应?我在帖子中添加了所有内容<代码>$params=array('loginToken'=>$sLoginToken','name'=>'testname','description'=>'testdescription','fileContents'=>$pdf\u数据,'dynamic'=>'true','ShareletWithGroup'=>'false','returnMessage'=>'','leteID'=>''
<?php
error_reporting(-1);
ini_set('display_errors', true);
$pdf_data = file_get_contents('test.pdf');

if( ! $pdf_data) {
    print 'Could not read file';
    exit;
}

$pdf_data = base64_encode($pdf_data);
print $pdf_data;