-1

しばらく前に書いた PHP をコピーして、アドレスをスクラブしました。元のページでは、ライブ Web サーバー上にあり、完全に機能します。現在のスクリプトは、開発マシンのコマンド ラインから実行されます。CLI スクリプトは常に「インデックスが定義されていません」というエラーをスローしますが、インデックスは次のコードから定義されています。

$url = 'http://production.shippingapis.com/ShippingAPI.dll?API=ZipCodeLookup&XML=';
$msg = '
<ZipCodeLookupRequest USERID="xxxxxxxxxx">
<Address ID="0"><FirmName></FirmName><Address1>' . $suite . '</Address1>
<Address2>' . $street . '</Address2>
<City>' . $city . '</City><State>' . $state . '</State>
</Address></ZipCodeLookupRequest>
';

//get the response from the USPS
$newurl = $url . urlencode($msg);

// echo $newurl;

$xml    = $newurl;
$parser = xml_parser_create();

// open a file and read data
$fp      = fopen($xml, 'r');
$xmldata = fread($fp, 4096);

xml_parse_into_struct($parser, $xmldata, $values);

xml_parser_free($parser);
//echo $xmldata;
//print_r($values);

if ($values[6][tag] === 'ZIP4') {
    $street = $values[2][value];
    $city   = $values[3][value];
    $state  = $values[4][value];
    $zip5   = $values[5][value];
    $zip4   = $values[6][value];
}
else if ($values[7][tag] === 'ZIP4') {
    $suite  = $values[2][value];
    $street = $values[3][value];
    $city   = $values[4][value];
    $state  = $values[5][value];
    $zip5   = $values[6][value];
    $zip4   = $values[7][value];
}
else {
    $suite  = '';
    $street = '';
    $city   = '';
    $state  = '';
    $zip5   = '';
    $zip4   = '';
}
;

if ($values[2][tag] != 'ERROR') {
    $verifiedBlock = ("
    $suite . chr(13) . chr(10);
    $street . chr(13) . chr(10);
    $city $state $zip5 $zip4
    ");
}
else {
    $verifiedBlock = ("
    The address could not be verified
    ");
}
;

$values の print_r を実行すると、次のように返されます。

Array (    [0] => Array
       (
           [tag] => ZIPCODELOOKUPRESPONSE
           [type] => open
           [level] => 1
       )

   [1] => Array
       (
           [tag] => ADDRESS
           [type] => open
           [level] => 2
           [attributes] => Array
               (
                   [ID] => 0
               )

       )

   [2] => Array
       (
           [tag] => ADDRESS1
           [type] => complete
           [level] => 3
           [value] => FL 7
       )

etc ・[6]と[7]は必ず存在することを確認しました。それでも、常にこれらの行と行で「インデックスが定義されていません」というエラーがスローされif ($values[2][tag] != 'ERROR')ます。

ここで私が見逃している愚かで明白なことを誰か教えてもらえますか?

4

2 に答える 2

1

次のように変更します:

if ($values[2]["tag"] != 'ERROR')
于 2012-05-12T12:04:41.070 に答える
1

あなたのコードでは、 $values[2][tag].In this contexttagは、定義してはならない定数です。文字列のキーtagを持っているので、文字列として使用する必要があります$values[2]['tag']。ああ、他のインデックス (キー) についても同じことを行います。

于 2012-05-12T12:06:19.010 に答える