2017-01-31 15 views
0

JavaScript를 통해 브라우저 시간대를 가져오고 ob_start() 및 ob_get_clean을 사용하여 PHP 변수에서 캡처하려고합니다. ob_get_clean에 의해 설정된 값은 문자열로 표시되지만, PHP에서 int로 캐스팅하려고하면 값은 0으로 변경됩니다.ob_get_clean으로 설정된 php 변수는 문자열이지만 정수로 캐스팅하지 않습니다.

이 문자열 (int) $ offset 또는 INTVAL ($ 오프셋) 또는 오프셋 $ * 1 스트링 (420)으로 시작하지만, 정수로 변환 한 결과가 0

<?php 
    ob_start(); 
?> 

<script> 
    var d = new Date(); 
    document.write(d.getTimezoneOffset()); 
</script> 

<?php 
    $offset = trim(ob_get_clean()); // timezone offset Colorado = 420 minutes 
    echo $offset; // 420 
    echo gettype($offset); // string 
    $offset += 0; 
    echo gettype($offset); // integer 
    echo $offset; // shows 0 - I expect the value to be 420 

나는 값이 정수로 $ 오프셋 기대 값을 정수로 변경 이제는 일반적인 문자열로 비슷한 코드를 시도했지만 예상되는 결과를 얻었습니다.

$strnum = '530'; 
echo gettype($strnum); // string 
$strnum += 0; 
echo gettype($strnum); // integer 
echo $strnum; // 530 
?> 

왜 두 예제가 동일하게 작동하지 않는지 알 수 없습니다.

+0

아웃이 시도 – Jigarb1992

답변

0

유 캐스트 (INT) 또는 INTVAL() 함수를 사용하지 왜

예 :

$var = (int) $yourstring 

OR 

$var = intval($youtstring) 
+0

문자열을'(int) $ offset' 또는'intval ($ offset)'또는'$ offset * 1' 문자열로 변환하는 방법은 중요하지 않습니다. 420이지만,이를 정수로 변환 한 결과 값은 정수 0으로 변경됩니다. – RoamingPro

2

당신이, 당신은 당신이, PHP에서 JS 스크립트 출력을 잡을 수 없습니다 아약스 통화를 통과해야합니다. 화면 출력이 아닌 페이지의 소스 출력을 확인하십시오. (내 경우)

화면 출력 :

-60 string integer 0 

REAL OUTPUT (SOURCE) :

<script> 
    var d = new Date(); 
    document.write(d.getTimezoneOffset()); 
</script> 
string 
integer 
0 
0

은 (오프셋이`$ = 시도 적이

$offset = 'timezone offset Colorado = 420 minutes'; 
preg_match_all('!\d+!', $offset, $matches); 
echo $offset; // 420 
print_r($matches); //array 
echo $matches[0][0]; //420 

$matches[0][0] += 1; 

echo $matches[0][0];