Lopar
@Lopar
системный администратор

Передача строчного параметра в функцию php?

Доброго дня.

Изначальный вопрос содержал ошибочные вводные и был изменён.

Есть два куска кода:

1.php
while(1) {
  $files = array(1 => 'Inf01','Inf02','Inf03','Inf04','Inf05');
  $b = 0;
  foreach ($files as $key => $filename) {
    $file = '/home/admin/web/***/public_html/up/'.$filename.'.csv';
    if (file_exists($file)) { 
      $parsing = '/home/admin/web/***/public_html/pars/'.$key.'.inc';
      if ($key < 10) $parsing = '/home/admin/web/***/public_html/pars/0'.$key.'.inc'; 
      $logfile = '/home/admin/web/***/public_html/logs/'.$filename.'.log';
      $current = iconv ('WINDOWS-1251','UTF-8',file_get_contents($file)); # Переписать! Тормозит!
      file_put_contents($logfile, $current, FILE_APPEND | LOCK_EX); # Пишем необработанную строку в логи.
      $parser = explode(';', $current);
      if ($parser[2] > 0) include 'sms.php'; # Отправка sms.
      $insert = '<tr class="color'.$parser[0].'"><td><a target="_blank" href="log.php?l='.$filename.'.log">'.$filename.'</a></td><td>'.$parser[1].'</td><td>'.$parser[3].'</td><td class="sms'.$parser[2].'"></td></tr>';

      if ($parser[0] == 0) $insert = ''; 
      file_put_contents($parsing, $insert); # Пишем наш будущий HTML код.
      unlink($file); #Удаляем обработанный файл.
    }
}
sleep(1);
if (file_exists('/home/admin/web/***/public_html/stop')) break;


sms.php
if (!function_exists('sendsms')) {
  function sendsms($smstext,$smsnumber){
    $headers = array(
   	'Accept-charset: UTF-8',
        'Content-type: application/x-www-form-urlencoded; charset=UTF-8',
	);
    if( $curl = curl_init() ) {
      curl_setopt($curl, CURLOPT_URL, 'http://62.149.27.48:8180/sms/recv');
      curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_POSTFIELDS, "login=*****&password=*****&src=*****&dst=".$smsnumber."&text=".$smstext);
      $out = curl_exec($curl);
      echo $out;
      curl_close($curl);
    }
  }
}
switch ($parser[2]) {
  case '4': sendsms($parser[3],38063*******);	
  case '3': sendsms($parser[3],38093*******);	
  case '2': sendsms($parser[3],38067*******);	
  case '1': sendsms($parser[3],38067*******); 
}

$debug_message = "А у попа была собака. Он её любил!";
$debug_message2 = "";

sendsms($debug_message,38067*******); # OK
sendsms($debug_message2,38067*******); # FAIL
#sendsms($parser[3],38067*******); #FAIL
?>


Судя по симптомам и по внезапно найденной ошибке:
PHP Notice:  Undefined variable: parser in ***/sms.php on line 20

Напрашивается вывод, что в файл, который присоединён через include перестали передаваться переменные $parser[]. Причём переменные не могут быть пустыми, как как после присоединённого файла есть запись в лог, в котором переменные явно присутствуют и явно не пустые.

Изначально парсится xxx.csv файл, который имеет структуру 4;2016-01-18 14:25:54;2;Тест проверка СМС. После распарсивания в лог падает тоже строчка целиком, что позволяет снять подозрения с того, что нужные переменные могут быть пустыми.

Пните меня в нужную сторону, ибо не замечаю я чего-то банального.
Спасибо.
  • Вопрос задан
  • 310 просмотров
Пригласить эксперта
Ответы на вопрос 2
function(Тест текст,$integer); #FAIL
function("Тест текст",$integer); #OK

Так строки всегда либо в кавычках либо в переменной, у вас в первом случае просто ошибка синтаксиса должна быть.
В чём проблема с function($string[0],$integer);
Должно всё работать, перепроверьте может у вас нет 0 элемента или там что-то не то.
Ответ написан
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Даже разбираться не хочется в причинах такого поведения.
Что вам мешает сделать нормально? Добавьте функцию sendsms в начало 1.php (или оставьте её одну в файле sms.php) и подключайте там. Тогда и проверка на function_exists не понадобится.
Зачем стрелять себе в ногу, а потом героически, превозмогая боль медленно и петляя двигаться к желанной цели?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы