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
Форумы портала PHP.SU :: Версия для печати :: Почему-то добавляется пробел
Форумы портала PHP.SU » » Вопросы новичков » Почему-то добавляется пробел

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

1. improbable - 16 Октября, 2013 - 20:54:42 - перейти к сообщению
Есть вот такой файл 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?

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

PHP:
скопировать код в буфер обмена
  1. $data = "$value1|$value2\n"


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

Подскажите, пожалуйста Улыбка
2. IllusionMH - 17 Октября, 2013 - 01:54:02 - перейти к сообщению
improbable, trim?
3. Squirrel - 17 Октября, 2013 - 01:56:56 - перейти к сообщению
improbable пишет:
Почему-то добавляется пробел к каждому значению массива, кроме последнего.
Уверен, что пробел? Мне что-то подсказывает что char(13) он же "\r".
Судя по всему свой файл ты делал на Windows по этому в конце строк "\r\n"
А скрипт работает на *nix системе, где конец строк это "\n"
Как простейший вариант, используй редактор который умеет работать с *nix концами строк.
Например NotePad++
Или попробуй php_flag auto_detect_line_endings On
4. armancho7777777 - 17 Октября, 2013 - 10:30:29 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. file('accounts.txt', FILE_IGNORE_NEW_LINES);

 

Powered by ExBB FM 1.0 RC1