Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Почему-то добавляется пробел

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
improbable
Отправлено: 16 Октября, 2013 - 20:54:42
Post Id



Частый гость


Покинул форум
Сообщений всего: 139
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)




Есть вот такой файл accounts.txt:
CODE (htmlphp):
скопировать код в буфер обмена
  1. 123|321
  2. 321|123
  3. 333|222


И вот такой скрипт, который с ним работает:
PHP:
скопировать код в буфер обмена
  1.  
  2. $username = '123';
  3. $password = '321';
  4.  
  5. $accounts = [];
  6.  
  7. if(!empty($username) and !empty($password))
  8. {
  9.         $accounts_file = file('accounts.txt');
  10.        
  11.         for($i = 0; $i < count($accounts_file); $i++)
  12.         {
  13.                 $string = explode('|', $accounts_file[$i]);
  14.                 $accounts[$string[0]] = $string[1];
  15.         }
  16.        
  17. }
  18.  
  19. if($accounts[$username] == $password){ echo 'ok'; }


Проблема в том, что по сути, должно писать ok.
Но ok не пишет, и я нашёл почему.
Вот почему
PHP:
скопировать код в буфер обмена
  1. var_dump($accounts); # array(3) { [123]=> string(4) "321 " [321]=> string(4) "123 " [333]=> string(3) "222" }


Почему-то добавляется пробел к каждому значению массива, кроме последнего.
Как решить проблему без применения функции trim?

Мне кажется, это связано с переносом строк при записи в файл.



И как поступить, если переносы строк мне нужны? Если добавлять \n в начало, тогда первая строчка файла будет всегда пустой, что не есть хорошо. Уверен, есть что-то ещё проще.

Подскажите, пожалуйста Улыбка
 
 Top
IllusionMH
Отправлено: 17 Октября, 2013 - 01:54:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




improbable, trim?
 
 Top
Squirrel
Отправлено: 17 Октября, 2013 - 01:56:56
Post Id


Забанен


Покинул форум
Сообщений всего: 147
Дата рег-ции: Авг. 2013  


Помог: 4 раз(а)

[+]


improbable пишет:
Почему-то добавляется пробел к каждому значению массива, кроме последнего.
Уверен, что пробел? Мне что-то подсказывает что char(13) он же "\r".
Судя по всему свой файл ты делал на Windows по этому в конце строк "\r\n"
А скрипт работает на *nix системе, где конец строк это "\n"
Как простейший вариант, используй редактор который умеет работать с *nix концами строк.
Например NotePad++
Или попробуй php_flag auto_detect_line_endings On
 
 Top
armancho7777777 Супермодератор
Отправлено: 17 Октября, 2013 - 10:30:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




PHP:
скопировать код в буфер обмена
  1. file('accounts.txt', FILE_IGNORE_NEW_LINES);
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB