0

民間の夕暮れ時にサーフ Web カメラのスイッチをオフにしようとしていますが、このコードの下部にある if ステートメントに問題があります。構文の問題だと確信していますが、それを見ることはできません。

//Sunrise
//Set Zenneth to 96 which is Civilian Twilight start. Normally set to 90 for "normal" sunrise
$sunrise = date_sunrise(time(), SUNFUNCS_RET_STRING, 51.575363, -4.037476, 96, 0);
$sunrise = (integer) str_replace(":", "", $sunrise);
// echo "Sunrise: ".$sunrise."</br>";

//Sunset
//Set Zenneth to 96 which is Civilian Twilight start. Normally set to 90 for "normal" sunrise
$sunset = date_sunset(time(), SUNFUNCS_RET_STRING, 51.575363, -4.037476, 96, 0);
$sunset = (integer) str_replace(":", "", $sunset);
// echo "Sunset: ".$sunset."</br>";


// get the current date using a 24 digit hour without leading zeros, as an int

$current_time = (Integer) date('Gi');

if ((($current_time >= 0000 && $current_time <= $sunrise) && ($current_time >= $sunset
&& $current_time <= 2359)) && ($_SERVER["REQUEST_URI"] == "/webcams/langland-webcam" 
| $_SERVER["REQUEST_URI"] == "/webcams/caswell-webcam" || $_SERVER["REQUEST_URI"] ==
"/webcams/llangennith-webcam" || $_SERVER["REQUEST_URI"] == "/webcams/swansea-webcam"))
{
   // Cameras are offline

   return true;

}
4

1 に答える 1

1

うわぁ。それは一つの大きなif声明です。私はそれを少し分解しました:

if (
    (
           ($current_time >= 0000 && $current_time <= $sunrise)
        && ($current_time >= $sunset && $current_time <= 2359)
    //  ^^ Should be `||`
    ) && (
           $_SERVER["REQUEST_URI"] == "/webcams/langland-webcam"
        |  $_SERVER["REQUEST_URI"] == "/webcams/caswell-webcam"
    //  ^ Should be `||`
        || $_SERVER["REQUEST_URI"] == "/webcams/llangennith-webcam"
        || $_SERVER["REQUEST_URI"] == "/webcams/swansea-webcam"
    )
) {

||コメントしたように、最初に気付くのは、最初の比較で使用する必要があることです。|さらに、後での代わりに単一のパイプを使用します||

全体として、このコードを少しリファクタリングすることをお勧めします。おそらく、許可された URI を配列に移動してから、 を使用in_array()して確認してください。このような面倒ifな s は問題を引き起こす可能性があります--あなたが今発見したように。このようなもの:

$validUris = array("/webcams/langland-webcam", "/webcams/caswell-webcam", "/webcams/llangennith-webcam", "/webcams/swansea-webcam");
if (in_array($_SERVER["REQUEST_URI"], $validUris)) {
    if (($current_time >= 0000 && $current_time <= $sunrise) || ($current_time >= $sunset && $current_time <= 2359)) {
        // Cameras
        return true;
    }
}
于 2013-02-12T22:50:59.863 に答える