Настроил на локальной машине NConvert скачанный отсюда Все прекрасно работало. Но стал переносить все это на хостинг (в данном случае masterhost freebsd 6.2) и сразу при запросе информации об изображении стала появляться ошибка. Стал искать причину - $fResult.text - выдавал информцию о файле в исходном виде $fResult.stderr - выдавал wmftogif: not found $fResult.status - выдавал 0
** NCONVERT v5.50 (c) 1991-2009 Pierre-E Gougelet (Sep 16 2009/14:59:37) ** Version for FreeBSD x86 (X11) (All rights reserved) ** This is a freeware software (for non commercial use)
/home/u98130/hev-dog.ru/www//_pic_/dogs/146.jpg : Success Format : JPEG TrueColor (v1.2) Name : jpeg Compression : JPEG Width : 600 Height : 400 Components per pixel : 3 Bits per component : 8 Depth : 24 # colors : 16777216 Color model : RGB Bytes Per Plane : 1800 Orientation : Top Left Xdpi : 100 Ydpi : 100 Page(s) : 1 , wmftogif: not found , 0
Стал искать причину дальше и остановился на том, что не срабатывает регулярное выражение ^fInfo.text.match[^^\s*(\S.+\S)\s+:\s+(.+)\s*^$][gm] при этом выражение ^fInfo.text.match[^^\ *(.+)\ +:\ +(.+)\ *^$][gm] срабатывает но не дает приемлемый результат т.к. \s и \S относятся к Спецсимволам в регулярных выражениях то я сделал вывод, что именно спецсимволы и не срабатывают.
Встречался ли кто-нибудь с такой проблемой? Как можно ее решить? На всякий случай выкладываю код функции в которой происходит ошибка
@_parseInfo[fInfo][sDummy;tSize]$result[$.hRaw[^hash::create[]]]# этот код срабатывает и информация пишется в файл но не убирает пробелы после первого слова$f_info_text[$fInfo.text]$f_info_match[^f_info_text.match[^^\ *(.+)\ +:\ +(.+)\ *^$][gm]]^f_info_match.save[/f_info_match.txt]^if(!$fInfo.status && def $fInfo.text){# а этот код уже не срабатывает$sDummy[^fInfo.text.match[^^\s*(\S.+\S)\s+:\s+(.+)\s*^$][gm]{^result.hRaw.add[$.[$match.1][$match.2]]^switch[$match.1]{^case[Name]{^result.add[$.sFormat[$match.2]]}^case[Compression]{^result.add[$.sCompression[$match.2]]}^case[Width]{^result.add[$.iWidth($match.2)]}^case[Height]{^result.add[$.iHeight($match.2)]}^case[Xdpi]{^result.add[$.iXdpi[$match.2]]}^case[Ydpi]{^result.add[$.iYdpi[$match.2]]}^case[# colors]{^result.add[$.iColors[$match.2]]}}}]}#end @_parseInfo
прикольно вы изменили regexp. если уж выкидывать метасимволы, совпадающими с пробельными символами, то выкидывать (заменять на пробел или на [ ^#09^#0A]) надо \S, а не оставлять вместо него '\ '
но скорее всего дело не в них. по моему разница в том, что другая версия nconvert выдаёт информацию в немного другом виде. приведите info для локальной версии и для версии на хостинге.
а этот код уже не срабатывает
что это значит? добавьте такой код перед существующим кодом с match:
Благодарю за ответ. подробности об ошибке [Mon Sep 28 10:36:11 2009] [77299] /adm/foto.html: /home/u98130/hev-dog.ru/www/_classes_/img.p(73:10): 'info' Unknown image format '/_pic_/dogs/146.jpg' [Img] [uri=/adm/foto.html, method=POST, cl=76474]
выскакивает отсюда (img.p)
# get image info@info[sFileSrc][fResult]^self._checkInputFile[info;$sFileSrc]$fResult[^self._exec[info;
$.sInput[$sDocRoot/$sFileSrc]]]$om[$fResult.text , $fResult.stderr , $fResult.status]^om.save[/om.txt]$result[^self._parseInfo[$fResult]]# $result.hRaw пуст, поэтому и ошибка^if(!$result.hRaw){^throw[$sClassName;info;Unknown image format '$sFileSrc']}#end @info
regexp менял ради эксперимента (пока не очень хорошо разобрался) но получил почти нужный результат вместо "\S" я "\ " не менял было [^^\s*(\S.+\S)\s+:\s+(.+)\s*^$] стало [^^\ *(.+)\ +:\ +(.+)\ *^$] в первой скобке я брал все символы от окончания пробелов и хотел, чтобы был включен диапазон до начала пробелов. Но я понимаю что такая конструкция не сработает потому как ".+" как раз и берет все символы до ":" а соответственно и пробелы туда попадают
На локальном ** NCONVERT v5.50 (c) 1991-2009 Pierre-E Gougelet (Sep 16 2009/15:20:46) ** Version for Windows NT/9x/2000/Xp/Vista (All rights reserved) ** This is a freeware software (for non commercial use)
c:/apache_swissknife/сайты/hev-dog/html///_pic_/dogs/155.jpg : Success Format : JPEG TrueColor (v1.2) Name : jpeg Compression : JPEG Width : 600 Height : 400 Components per pixel : 3 Bits per component : 8 Depth : 24 # colors : 16777216 Color model : RGB Bytes Per Plane : 1800 Orientation : Top Left Xdpi : 100 Ydpi : 100 Page(s) : 1 , , 0
На сервере
** NCONVERT v5.50 (c) 1991-2009 Pierre-E Gougelet (Sep 16 2009/14:59:37) ** Version for FreeBSD x86 (X11) (All rights reserved) ** This is a freeware software (for non commercial use)
/home/u98130/hev-dog.ru/www//_pic_/dogs/146.jpg : Success Format : JPEG TrueColor (v1.2) Name : jpeg Compression : JPEG Width : 600 Height : 400 Components per pixel : 3 Bits per component : 8 Depth : 24 # colors : 16777216 Color model : RGB Bytes Per Plane : 1800 Orientation : Top Left Xdpi : 100 Ydpi : 100 Page(s) : 1 , wmftogif: not found , 0
** NCONVERT v5.50 (c) 1991-2009 Pierre-E Gougelet (Sep 16 2009/14:59:37) ** Version for FreeBSD x86 (X11) (All rights reserved) ** This is a freeware software (for non commercial use)
** NCONVERT v5.50 (c) 1991-2009 Pierre-E Gougelet (Sep 16 2009/15:20:46) ** Version for Windows NT/9x/2000/Xp/Vista (All rights reserved) ** This is a freeware software (for non commercial use)
с регулярными выражениями я пока слабо разобрался меня удивляет, что на локалке выражение ^^\s*(\S.+\S)\s+:\s+(.+)\s*^$ срабатывает и дает результат а на хостинге нет.
Странный вопрос - у вас же вроде как копия сайта на локале? Обратиться к /cgi-bin/parser3.cgi (или как он у вас называется) или просто запустить из командной строки...
Согласен, что вопрос странный )) Но у меня Apache Swissknife Нашел, что сборка 035 и парсер там 3.2.2b На хостинге до того как я туда установил 3.3.0 стоял 3.2.3 (и результат был такой же)
И еще, возможно, более странный вопрос - а как запустить парсер из командной строки?
мне тоже с трудом верится :) ещё попробуйте в исходном regex-е заменить: все \s на [^#09^#0A^#20] все \S на [^^^#09^#0A^#20] это решило все проблемы - все заработало Благодарю за решение подскажите пожалуйста где можно почитать про [^#09^#0A^#20], про [^^^#09^#0A^#20] и т.д. и с чем все таки связано, что \s и \S не работали.
но на всякий случай выкладываю $fInfo.text
вот с хостинга
** NCONVERT v5.50 (c) 1991-2009 Pierre-E Gougelet (Sep 16 2009/14:59:37) **
Version for FreeBSD x86 (X11)(All rights reserved)
** This is a freeware software (for non commercial use)
/home/u98130/hev-dog.ru/www//_pic_/dogs/164.jpg : Success
Format : JPEG TrueColor (v1.2)
Name : jpeg
Compression : JPEG
Width : 600
Height : 400
Components per pixel : 3
Bits per component : 8
Depth : 24
# colors : 16777216
Color model : RGB
Bytes Per Plane : 1800
Orientation : Top Left
Xdpi : 100
Ydpi : 100
Page(s) : 1
, wmftogif: not found
, 0
вот с локалки
** NCONVERT v5.50 (c) 1991-2009 Pierre-E Gougelet (Sep 16 2009/15:20:46) **
Version for Windows NT/9x/2000/Xp/Vista (All rights reserved)
** This is a freeware software (for non commercial use)
c:/apache_swissknife/сайты/hev-dog/html///_pic_/dogs/163.jpg : Success
Format : JPEG TrueColor (v1.2)
Name : jpeg
Compression : JPEG
Width : 600
Height : 400
Components per pixel : 3
Bits per component : 8
Depth : 24
# colors : 16777216
Color model : RGB
Bytes Per Plane : 1800
Orientation : Top Left
Xdpi : 100
Ydpi : 100
Page(s) : 1
, , 0