Непонятная работа strrchr()

trigger

Guest
Непонятная работа strrchr()

PHP:
$f = join('', file('temp.gif'));

$n = 27;

echo ord($f[$n]).'="'.$f[$n].'"<hr>';

echo '<hr>'.strrchr($f, $f[$n]).'<hr>';

echo($f).'<br>';
Так вот почему-то
PHP:
strrchr($f, 27) === FALSE
, хотя кто разбирал ГИФки тот знает, что на 27-м месте в оптимизированной моноцветной ГИФке стоит обычный символ ','
 

trigger

Guest
Спасибо большое, этот мануал у меня давно скачан.
А в чем собственно проблема, я не понимаю, обьясните маленькому глупому программисту, что тут не так?
PHP:
strrchr($f, $f[$n])
// $f -- строка из 83 символов
// $f[$n] -- строка из 1-го символа, стоящего на 27-м
// месте в строке $f
// ord($f[$n]) == 44
 

mrskhris

Guest
trigger,
во-первых, можно узнать где это написано что на 27 месте стоит запятая?
во-вторых, а $f--то у тебя вообще выводится?
 

trigger

Guest
У меня сейчас вот такой код:
PHP:
$f = join('', file('red.gif'));
echo $f.'<hr>';
$n = 27;
echo '$n='.$n.' ord($f[$n])='.ord($f[$n]).' $f[$n]='.$f[$n].'<hr>';
echo 'strrchr($f, $f[$n])='.strrchr($f, $f[$n]).'<hr>';
exit;
Вывод:
GIF89a Ђя!щ, „Џ©Лнc+;
--------------------------------------------------------------------------------
$n=27 ord($f[$n])=44 $f[$n]=,
--------------------------------------------------------------------------------
strrchr($f, $f[$n])=

Причем, если поменять $n на 3, то все нормально:

GIF89a Ђя!щ, „Џ©Лнc+;
--------------------------------------------------------------------------------
$n=3 ord($f[$n])=56 $f[$n]=8
--------------------------------------------------------------------------------
strrchr($f, $f[$n])=89a Ђя!щ, „Џ©Лнc+;
--------------------------------------------------------------------------------


Строку $f не могу привести, тк эксплорер ее кушает. Могу привести посимволько в цифровом виде, но вы лучше сами создайте 10х10 картинку красного(#ff0000) цвета. И не просто в Paint, а оптимизировать тоже надо.
 

trigger

Guest
Форвард к прошлой мессаге
Оптимизировать надо для того, чтобы на 27 месте стоял символ начала дескриптора изображения, а именно ',' он же chr(44) он же chr(hexdec('2c'))
Примечательно, что для индексов 25,26,28,29 все нормально работает.
Я бы не писал сюда, если бы мог сам разобраться.
 

mrskhris

Guest
Для индексов 25, 26, 28 и 29 у меня ничего не заработало.
Длина строки лежащей в $f равна 7. Ключевое слово здесь - "строка".

Если вам так нужно считать все, попробуйте а) читать файл через дескриптор и в бинарном режиме б) уберите ord нафиг - увидите запятую.
в) тем не менее, у вас все равно ничего не получится.

Почему? Потому что в вашем файле на 7-м месте стоит символ \0 - символ конца строки. А все строковые функции не рассчитаны на работу с бинарными данными.
 

trigger

Guest
Большое спасибо за дельный совет. Странно, что столько копаясь в мануале не заметил, что строковые ф-ции не работают с бинарными строками.
 
Сверху