Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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 click2mail molpro api非法字符异常仅在Google应用程序引擎处于生产状态时出现_Php_Xml_Google App Engine - Fatal编程技术网

Php click2mail molpro api非法字符异常仅在Google应用程序引擎处于生产状态时出现

Php click2mail molpro api非法字符异常仅在Google应用程序引擎处于生产状态时出现,php,xml,google-app-engine,Php,Xml,Google App Engine,我的GAE实例(php55)有问题。当我在本地主机上运行GAE时,我的应用程序正在与api进行交互,我的代码工作正常,但当我在生产环境中从GAE运行click2mail时,它抛出了一个错误。他们正在生成一个大堆栈跟踪,跟踪中的根本原因错误是: WstxUnexpectedCharException: Illegal character ((CTRL-CHAR, code 5)) at [row,col {unknown-source}]: [1,213] 他们的api是基于xml的,所以我生成

我的GAE实例(php55)有问题。当我在本地主机上运行GAE时,我的应用程序正在与api进行交互,我的代码工作正常,但当我在生产环境中从GAE运行click2mail时,它抛出了一个错误。他们正在生成一个大堆栈跟踪,跟踪中的根本原因错误是:

WstxUnexpectedCharException: Illegal character ((CTRL-CHAR, code 5))
at [row,col {unknown-source}]: [1,213]
他们的api是基于xml的,所以我生成一个xml字符串(邮件地址)并将其发布到他们的api端点。我已经联系过他们,并向他们提供了我正在上传的xml,他们找不到任何错误,它可以很好地上传给他们

我今天做了一些详尽的测试来解决这个问题

我设置了一个新的Google应用程序引擎实例,这样我就可以将它与我的应用程序的其余部分隔离开来,并尝试获得一个最小的环境。我把一个简单的测试页面放在一起,这样我就可以在localhost和GAE上的googlecloud上并排运行它

当我试图在谷歌的云中上传3000个地址时,我验证了这个错误仍然存在,当我从localhost上传时,这个错误仍然有效

然后,我将数据集分成两部分(1500和1500),并尝试每一部分,看看其中一个是否有效。他们都在本地工作,都在谷歌的云上失败了

我试着把它分成4个(每个750个)。他们都在当地工作。所有这些都在谷歌的云计算中失败了

然后我试着上传一个地址,第一个地址。在本地工作,在谷歌云上失败

然后我再次尝试上传一个地址,但最后一个地址(以防万一)。在本地工作,在谷歌云上失败

我试图找到任何可能与本地主机GAE和生产GAE不同的内容。代码使用
simplexmlement
生成xml,我认为生产GAE可能有不同的实现或其他东西(很像ImageMagick在本地主机和生产环境中的工作方式不同),因此我尝试更新代码以手动生成xml,而不是使用
simplexmlement
。不幸的是,它在localhost上工作,但在谷歌的云上仍然失败

生产GAE有些不同,正在干扰我的应用程序。在我的代码和click2mail方面,这似乎都不是问题,所以我真的需要你的帮助

下面是我上传的一个xml api示例,其中我只包含一个地址(但为了隐私,我更改了地址):

我已经用尽了我所有的想法。你知道为什么这在本地主机上可以工作,但在GAE上却无法生产吗

<?xml version="1.0"?>
<addressList>
    <addressListName>test list one address time 1489112489</addressListName>
    <addressMappingId>XXXXXX</addressMappingId>
    <addresses>
        <address>
            <seller_id>XXXXXX</seller_id>
            <due_date>2017-03-03</due_date>
            <id>110</id>
            <num>1</num>
            <c_id>34</c_id>
            <title>XXXXXX</title>
            <first_name>XXXXXX</first_name>
            <last_name>XXXXXX</last_name>
            <address>XXXXXX XXXXXX Ave</address>
            <city>XXXXXX</city>
            <state>CA</state>
            <zip>XXXXXX</zip>
            <o1></o1>
            <o2></o2>
            <o3></o3>
            <mail_address>XXXXXX XXXXXX Ave</mail_address>
            <mail_city>XXXXXX</mail_city>
            <mail_state>CA</mail_state>
            <mail_zip>XXXXXX</mail_zip>
            <phone1></phone1>
            <manager_id>1</manager_id>
            <delivery_type_id>8</delivery_type_id>
            <carrier>click2mail</carrier>
            <cost>0.4220</cost>
            <weight>0.0000</weight>
            <offer_exp>Friday, March 24, 2017</offer_exp>
            <mailer_tracking>XXXXXX</mailer_tracking>
        </address>
    </addresses>
</addressList>
$xml = new SimpleXMLElement('<addressList/>');
$xml->addChild('addressListName', $listname);
$xml->addChild('addressMappingId', $mappingid);

$addresses = $xml->addChild('addresses');

foreach($addresslistarray as $row) {
    $address = $addresses->addChild('address');

    foreach($fieldnames as $field) {
        $value = '';
        if ($row[$field] != null) {
            $value = htmlspecialchars($row[$field]);
        }
        $address->addChild($field, $value);
    }
}

$xmlstring = $xml->asXML();

$url = c2m_endpoint('addressLists'); // just builds the api url

$response = c2m_httppost($url, $xmlstring);


function c2m_httppost($url, $content) {
    $client = new GuzzleHttp\Client(['verify'=>'ca-bundle.crt']);

    $config = [
        'auth' => [c2m_username(), c2m_password()],
        'body' => $content,
        'headers' => [
            'Content-Type'     => 'application/xml',
        ]
    ];

    try {
        $response = $client->request('POST', $url, $config);
        $result = (string)$response->getBody();
        return c2m_xml_to_map($result);

    } catch (GuzzleHttp\Exception\ServerException $e) {

        error_log("URL: $url");
        error_log("REQUEST: ".GuzzleHttp\Psr7\str($e->getRequest())."\n\n");
        if ($e->hasResponse()) {
            $mesg = "RESPONSE: ".GuzzleHttp\Psr7\str($e->getResponse())."\n\n";
            print($mesg);
            error_log($mesg);
        }

        return null;

    }
}