반응형

출처

https://stackoverflow.com/questions/32029647/warning-feof-expects-parameter-1-to-be-resource-boolean-given-in-volume1-we

경고 : feof()는 첫 번째 매개 변수가 리소스가 될 것으로 예상합니다. 하지만은 /volume1/web/comment.php 62행에 boolean 타입입니다.

저는 youtube와 다른 사이트의 도움으로 코드를 학습하기 시작했습니다만, 문제에 직면하였습니다. 여기에 제 코드입니다.

<form action="" method="post" id="c">
  <label> Name: <br><input type="text" name="name" size="36"></label><br></br>
  <label> Message: <br><textarea cols="35" rows="5" name="mes"></textarea></label><br></br>
  <input type="submit" name="submit" value="Submit" class="texty" >
</form>

<?php
$post = $_POST["post"];
$name = $_POST["name"];
$text = $_POST["mes"];

if ($post) {

    #WRITE DOWN COMMENTS#

    $write = fopen("c.txt", "a+");
    fwrite($write, "<u><b> $name</b></u><br>$text<br></br>");
    fclose($write);

    #DISPLAY COMMENTS#

    $read = fopen("c.txt", "r+t");
    echo "All comments:<br>";

    while (!feof($read)) {   #this line does the error#
        echo fread($read, 1024);
    }
    fclose($read);
}
else{
    #DISPLAY COMMENTS#

    $read = fopen("c.txt", "r+t");
    echo "All comments:<br>";

    while (!feof($read)) {
        echo fread($read, 1024);
    }
    fclose($read);
}
?>

그래서 2개의 파일이 있는데, 하나는 당신이 코멘트를 입력하고 그것을 게시하는 곳이고, 다른 하나는 당신이 입력한 것을 붙여 넣은 다음 페이지에 다시 출력되는 .txt 파일입니다. 파일 권한에 문제가 있는 것 같습니다. "r"에만 입력하면 오류가 발생하지 않지만 게시하려는 내용이 저장되지 않기 때문입니다. 감사합니다. 읽고 답장해 주셔서 감사합니다.


2 개의 답변 중 1 개의 답변만 추려냄.

fopen은 파일을 열 수 없는 경우 부울(FALSE) 타입을 반환합니다. feof에 전달하기 전에 $read가 false가 아닌지 확인해야 합니다. 그리고 왜 파일을 읽을 수 없는지 알아 내십시오.

if ($read) {
    ...

권한으로 인해 또는 파일 자체를 찾을 수 없는 경우 파일을 읽을 수 없습니다. c.txt를 참조하고 있지만 PHP가 있는 동일한 디렉토리에 있습니까? getcwd를 사용하여 PHP가 어떤 디렉토리에 있는지 확인할 수 있습니다.

echo getcwd ()

또한 form 핸들러는 $_POST[ 'post']에 값이 있지만 해당 이름이 form에서 사용되지 않는 경우에만 쓰기 분기문에 들어갑니다 (적어도 표시된 예제에서는 사용되지 않았습니다).

반응형
반응형

출처
https://stackoverflow.com/questions/19074552/converting-utc-to-a-different-time-zone-in-php

PHP에서 UTC 시간 대를 다른 시간 대로 변환하기

저는 UTC 시간대를 다른 시간대로 변환하기 위해 아래의 메소드를 사용하였습니다. 하지만 아래의 메소드는 UTC 시간을 리턴하는 것으로 보입니다. 제가 사용한 메소드에 잘못된 것이 무엇인지 충분히 알려주실 수 있으신가요?

static function formatDateMerchantTimeZone($t, $tz) {
   if (isset($t)) {
       return date('Y-m-d H:i:s', strtotime($t , $tz));
   } else {
       return null;
   }
}

$t는 제가 전달한 datetime입니다.
$tz는 America/Los_Angeles와 같은 시간대 입니다.


4개의 답변 중 2개의 답변

많은 사람들이 DateTime 클래스를 인지하지 못하거나 사용하지 않는다는 사실에 놀랐습니다. DateTime 클래스는 이와 같은 작업을 거의 사소하게 만듭니다.

함수에 전달하는 날짜 문자열이 UTC 시간대에 있다고 가정했습니다.

function formatDateMerchantTimeZone($t, $tz)
{
    $date = new \DateTime($t, new \DateTimeZone('UTC'));
    $date->setTimezone(new \DateTimeZone($tz));
    return $date->format('Y-m-d H:i:s');
}

작동 확인


다음을 시도해보세요.

<?php
/**    초 단위로 origin 시간대에서 remote 시간대의 offset을 리턴합니다..
*    @param $remote_tz;
*    @param $origin_tz; null 이면 서버의 현재 시간대가 origin 으로 사용됩니다.
*    @return int;
*/
function get_timezone_offset($remote_tz, $origin_tz = null) {
    if($origin_tz === null) {
        if(!is_string($origin_tz = date_default_timezone_get())) {
            return false; // UTC 타임스탬프가 반환되었습니다 -- 탈출!
        }
    }
    $origin_dtz = new DateTimeZone($origin_tz);
    $remote_dtz = new DateTimeZone($remote_tz);
    $origin_dt = new DateTime("now", $origin_dtz);
    $remote_dt = new DateTime("now", $remote_dtz);
    $offset = $origin_dtz->getOffset($origin_dt) - $remote_dtz->getOffset($remote_dt);
    return $offset;
}
?>
사용예시:
<?php
// 이는 10800을 리턴합니다 (3시간) ...
$offset = get_timezone_offset('America/Los_Angeles','America/New_York');
// 또는 이미 서버 시간이 'America/New_York'로 설정되어 있다면...
$offset = get_timezone_offset('America/Los_Angeles');
// $offset 값을 취해서 당신의 timestamp 값을 조절할 수 있습니다.
$offset_time = time() + $offset;
?>
반응형

+ Recent posts