За последние 24 часа нас посетили 59136 программистов и 1814 роботов. Сейчас ищет 961 программист ...

Проблема с выводом массива

Тема в разделе "Прочие вопросы по PHP", создана пользователем trifolog, 22 май 2015.

  1. trifolog

    trifolog Новичок

    С нами с:
    22 май 2015
    Сообщения:
    5
    Симпатии:
    0
    Доброго дня.
    Исходные данные:
    В базе сервера1 хранятся записи: ДатаВремя, НомерТелефона1, НомерТелефона2
    На FTP сервере2 хранятся записи телефонных разговоров в формате ДатаВремя.gsm.
    В некоторых случаях файлы создаются на одну секунду позже, чем запись в базе, т.е. ДатаВремя+1сек.gsm.

    Делаю проверку на существование фала ДатаВремя.gsm. Если он есть, то вывести ДатаВремя.gsm, в противном случае вывести ДатаВремя+1сек.gsm.
    И вот здесь получаю проблему. Выводится только ДатаВремя+1сек.gsm. И выдает ошибку in_array() expects parameter 2 to be array, boolean given.

    Подскажите пожалуйста, в чем проблема.
    Ниже код:
    Код (Text):
    1.  
    2. <?php
    3. ini_set('display_errors',1);
    4. error_reporting(E_ALL);
    5. require_once('header.php');
    6.    
    7. echo "<div align='center'>";
    8. echo "<form name=searchdate method=POST action=''>";
    9. echo "<br>Год <input type='text' name='date_y' size='4' maxLength='4' value='";echo date('Y');echo "'>";
    10. echo "Месяц <input type='text' name='date_m' size='2' maxLength='2' value='";echo date('m');echo "'>";
    11. echo " <input type='submit' name='show' value='Показать'>";
    12. echo "</form></div>";
    13.  
    14.  
    15. if(isset($_POST['show'])) {
    16.     $ftp_server="ftp_host";
    17.     $ftp_user = 'ftp_user';
    18.     $ftp_pass = 'ftp_pass';
    19.     $sql_server="sql_server";
    20.     $sql_user = 'sql_user';
    21.     $sql_pass = 'sql_pass';
    22.    
    23.     $link = ibase_connect($sql_server, $sql_user, $sql_pass);
    24.     $result = ("select EXTRACT(YEAR from calldate),EXTRACT(MONTH from calldate),EXTRACT(DAY from calldate),EXTRACT(HOUR from calldate),EXTRACT(MINUTE from calldate),EXTRACT(SECOND from calldate),billsec,dst from ast_cdr where EXTRACT(YEAR from calldate)='$_POST[date_y]' AND EXTRACT(MONTH from calldate)='$_POST[date_m]' and dst='89636953400' and billsec>'0' --order by calldate desc");
    25.    
    26.     $sth = ibase_query($link, $result);
    27.  
    28.     // connect to server
    29.     $conn_id=ftp_connect($ftp_server);
    30.     // inter to server with $ftp_user and $ftp_pass
    31.     $login_result=ftp_login($conn_id, $ftp_user, $ftp_pass);
    32.  
    33.     // check connection
    34.     if ((!$conn_id) || (!$login_result))
    35.         {
    36.         echo "Could not connect to server $ftp_server";
    37.         exit;
    38.         }
    39.     ftp_pasv ($conn_id, true) ;
    40.    
    41.     echo "<table cellspacing='0' cellpadding='5' valign='top' align='center' bordercolor='grey'>";
    42.     echo "<tr class='d0'><td><b>Дата</b></td>
    43.     <td><b>Время</b></td>
    44.     <td><b>Длительность</b></td>
    45.     <td><b>Файл</b></td>
    46.     </tr>";
    47.    
    48.     while ($cliprow = ibase_fetch_row($sth))
    49.     {
    50.         // добавляем ноль там, где необходимо
    51.         $month = strlen($cliprow[1]);
    52.         if ($month == '1') $cliprow[1] = '0'.$cliprow[1];
    53.         $day = strlen($cliprow[2]);
    54.         if ($day == '1') $cliprow[2] = '0'.$cliprow[2];
    55.         $hour = strlen($cliprow[3]);
    56.         if ($hour == '1') $cliprow[3] = '0'.$cliprow[3];
    57.         $minute = strlen($cliprow[4]);
    58.         if ($minute == '1') $cliprow[4] = '0'.$cliprow[4];
    59.         $cliprow[5] = str_replace('.0000', '', $cliprow[5]);
    60.         $second = strlen($cliprow[5]);
    61.         if ($second == '1') $cliprow[5] = '0'.$cliprow[5];
    62.         $date = $cliprow[0].$cliprow[1].$cliprow[2];
    63.         $time = $cliprow[3].$cliprow[4].$cliprow[5];
    64.        
    65.         $cdt = '4956411000';
    66.         $dst = $cliprow[7];
    67.         echo "<tr class='d1'><td> $cliprow[0]-$cliprow[1]-$cliprow[2] </td>
    68.         <td> $cliprow[3]:$cliprow[4]:$cliprow[5] </td>
    69.         <td> $cliprow[6] </td>
    70.         ";
    71.    
    72.         $path = '/Record/$date/';
    73.         $file = '$date-$time-$cdt($dst).gsm';
    74.         $check_file = $path.$file;
    75.         $contents = ftp_nlist($conn_id, $path);
    76.  
    77.         if (in_array($check_file, $contents)) {
    78.             echo "<td><a href='ftp://$ftp_user:$ftp_pass@$ftp_server/Record/DAHDI/r1/$date/$date-$time-$cdt($dst).gsm'><img src='img/disk_1641.png'></a></td>\n";
    79.         }
    80.         else {
    81.             $cliprow[5] = $cliprow[5] + 1;
    82.             $date = $cliprow[0].$cliprow[1].$cliprow[2];
    83.             $time = $cliprow[3].$cliprow[4].$cliprow[5];
    84.             echo "<td><a href='ftp://$ftp_user:$ftp_pass@$ftp_server/Record/DAHDI/r1/$date/$date-$time-$cdt($dst).gsm'><img src='img/disk_4985.png'></a></td>\n";
    85.         }
    86.        
    87.         //ftp_close($conn_id);
    88.        
    89.     }
    90.     ibase_free_result($sth);
    91.     ibase_close($link);
    92. }
    93.  
    94. echo "</tr></table></br></br>";
    95. require_once('footer.php');
    96. ?>
     
  2. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    проблема кроется в этой записи
    Код (Text):
    1.  if (in_array($check_file, $contents)) {...
    :)
     
  3. trifolog

    trifolog Новичок

    С нами с:
    22 май 2015
    Сообщения:
    5
    Симпатии:
    0
    Это я понял. Но что в ней не так?
     
  4. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
  5. trifolog

    trifolog Новичок

    С нами с:
    22 май 2015
    Сообщения:
    5
    Симпатии:
    0
    У меня не получается сопоставить текст ошибки с указанным мануалом.
    Ошибку читаю как "ожидается параметр два для массива...". Если имеется ввиду параметр "true"?
     
  6. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    не совсем.... Вместо массива передана логическая переменная - boolean given :)
     
  7. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Для начала проверяйте, является ли $contents массивом и не равен ли его размер нулю.
    is_array();
    sizeof()
     
  8. trifolog

    trifolog Новичок

    С нами с:
    22 май 2015
    Сообщения:
    5
    Симпатии:
    0
    Сделал проверку is_array()
    Код (Text):
    1.         if(is_array($contents))
    2.         {
    3.             echo "array";
    4.         }
    5.         else {
    6.             echo "not array";
    7.         }
    Выяснилось, что $contents не является массивом...
    И тут возникает вопрос.
    Почему в одном случае $contents не является массивом, а в другом $contents это массив
     
  9. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    значить, надо внимательно прочитать документацию про функцию
    Код (Text):
    1. ftp_nlist
    ;)
     
  10. trifolog

    trifolog Новичок

    С нами с:
    22 май 2015
    Сообщения:
    5
    Симпатии:
    0
    Правильно ли я понимаю, что мне нужно отбросить из $contents элементы директорий и "." ".."?
     
  11. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    если это описано в документации - то ты все верно понял :)