2013-02-12 2 views
0

Я пытаюсь отключить наши веб-камеры для серфинга в гражданских сумерках, но с некоторыми трудностями с инструкцией 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; 

} 

ответ

1

Yikes. Это одно огромное заявление 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(), чтобы проверить его. Cumbersome 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; 
    } 
} 
Смежные вопросы