2012-05-12 11 views
-1

필자가 작성한 일부 PHP를 복사하여 주소를 스크럽했습니다. 원본 페이지에서는 라이브 웹 서버에서 작동하며 완벽하게 작동합니다. 현재 스크립트는 내 개발 컴퓨터의 명령 행에서 실행됩니다. 나는 $ 값 인 print_r을 할 경우PHP에서 색인이 정의되지 않았습니다.

$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 
    "); 
} 
; 

, 나는이 돌아 오기 :

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 
     ) 

이 코드에서의 CLI 스크립트가 항상 발생 오류 '지수는 정의되지 않은'하지만, 인덱스가 정의된다 나는 [6]과 [7]이 항상 존재 함을 확인했다. 그러나 항상이 라인과 'if ($values[2][tag] != 'ERROR')'라인에는 '인덱스 정의되지 않음'오류가 발생합니다.

누군가 내가 어리석은 분명한 사실을 알려주시겠습니까? 그것은에

+2

대신'$ values ​​[2] [tag]'$ values ​​[2] [ 'tag']' – Leri

+0

스택 오버플로에 오신 것을 환영합니다! 코드를 올바르게 포맷하십시오. 코드 블록은 모든 코드 행 앞에 4 칸 들여 쓰기하여 삽입됩니다. 이번에는 코드를 포맷했지만 다음 번에 제대로 포맷하십시오. 추가 도움말은 [편집 FAQ] (http://stackoverflow.com/editing-help#code) –

답변

1

정의해서는 안 상수이다. 문자열이 tag 인 키가 있으므로 문자열처럼 사용해야합니다 (예 : $values[2]['tag']. 아, 그리고 다른 인덱스 (키)로 같은 일을하십시오.

+0

@Sarvesh Kumar Singh (PLB 역시 물론) - 완벽! 나는 그것이 명백한 무엇인가 알고 있었다. 그것은 내가 사용한 코드에 따옴표로 묶인 키가 없기 때문에 나에게 발생하지 않았으며 절대로 문제가되지 않았습니다. 고마워요, 너무 많이 - 오늘받지 못했다면 4000 개가 넘는 주소를 하나씩 입력하기 시작했을 것입니다. – Bendustries

1

변화 :이 컨텍스트 tag .IN $values[2][tag]를 참조하여 코드에서

if ($values[2]["tag"] != 'ERROR') 
관련 문제