Здравствуйте, samara, Вы писали:
S>Скрипт компилируется без ошибок. S>Но при вызове выдает ошибку: Premature end of script headers: /cgi-bin/engine.cgi S>Хотя заголовок должен отдаваться.
S>Посоветуйте знающие люди.
S>
S> код
S>
А что выдаётся при запуске не как cgi (просто из консоли, с нужным окружением)?
Здравствуйте, raskin, Вы писали:
R>А что выдаётся при запуске не как cgi (просто из консоли, с нужным окружением)?
А черт его знает, я в с++ полный "0" и как запустить скрипт не как cgi с нужным окружением представляю слабо (мне нужно встроить чужой скрипт баннерной сети в сайт,).
Какие нужно выполнить действия, что бы локализовать ошибку?
Здравствуйте, samara, Вы писали:
S>Здравствуйте, raskin, Вы писали:
R>>А что выдаётся при запуске не как cgi (просто из консоли, с нужным окружением)?
S>А черт его знает, я в с++ полный "0" и как запустить скрипт не как cgi с нужным окружением представляю слабо.
S>Какие нужно выполнить действия, что бы локализовать ошибку?
S>Заранее спасибо.
Стоп. Это не про С++. Это про ОС. Сначала неплохо бы понять, что с заголовками.
У вас какой доступ на сервер?
Скомпилируйте у себя, запустите, покажите вывод программы.
Потом замените все
printf(...
на
fprintf(stderr,...
перекомпилируйте, положите на сервер, запустите и покажите, как поменяется error.log .
Re[4]: Не могу запустьть скрипт
От:
Аноним
Дата:
15.05.05 16:41
Оценка:
Здравствуйте, raskin, Вы писали:
R>Стоп. Это не про С++. Это про ОС. Сначала неплохо бы понять, что с заголовками.
R>У вас какой доступ на сервер?
SSH
R>Скомпилируйте у себя, запустите, покажите вывод программы.
R>Потом замените все
R>
R>printf(...
R>
R>на
R>
R>fprintf(stderr,...
R>
R>перекомпилируйте, положите на сервер, запустите и покажите, как поменяется error.log .
Заменил, скрипт перекомпилировался без ошибок, в логе снова ошибка: Premature end of script headers: /cgi-bin/engine.cgi
Здравствуйте, Аноним, Вы писали:
А>SSH
Шансы есть...
Зайдите в папку со скриптом из запустите его(исходный вариант) из SSH — консоли. Вывод скрипта скажет многое... Будете класть — не забудьте [codе][/code].
Здравствуйте, samara, Вы писали:
S>Здравствуйте, raskin, Вы писали:
R>>Зайдите в папку со скриптом из запустите его(исходный вариант) из SSH — консоли. Вывод скрипта скажет многое...
S>Как запустить нескомпилированный скрипт из консоли? (Раньше SSH пользовался только для редактирования cron)
скомпилировать... исходный вариант — который с printf, хотя это не важно. g++ там есть? Или кинуть скомпилироанный и там запустить просто командой
S>>Как запустить нескомпилированный скрипт из консоли? (Раньше SSH пользовался только для редактирования cron) R>скомпилировать... исходный вариант — который с printf, хотя это не важно. g++ там есть? Или кинуть скомпилироанный и там запустить просто командой R>
Здравствуйте, samara, Вы писали:
S>Здравствуйте, raskin, Вы писали:
S>>>Как запустить нескомпилированный скрипт из консоли? (Раньше SSH пользовался только для редактирования cron) R>>скомпилировать... исходный вариант — который с printf, хотя это не важно. g++ там есть? Или кинуть скомпилироанный и там запустить просто командой R>>
R>>./engine.cgi
R>>
S>Segmentation fault
Ёк. Объясняю: программа накрывается из-за ошибок (90%-с памятью), не вызывая до этого ни одной из функций, печатающих заголовок.
Совет:
g++ engine.cpp -o engine.cgi -g
— или как там Вы компилируете? make? наверное
make CXXFLAGS+=-g
потом
gdb engine.cgi
(gdb) run
И функцию с SegFault-ом в студию. И исходничек в студию... Если не один — все в студию...
S>>Segmentation fault
R>Ёк. Объясняю: программа накрывается из-за ошибок (90%-с памятью), не вызывая до этого ни одной из функций, печатающих заголовок.
R>Совет: R>g++ engine.cpp -o engine.cgi -g
дало следующий ответ
-bash-2.05b$ g++ engine.cpp -o engine.cgi -g
/tmp/ccP8CRmJ.o: In function `dynarray::Add(char *)':
/home/engine.cpp(.text+0xa4): undefined reference to `mysql_close'
/tmp/ccP8CRmJ.o: In function `timeOut(int)':
/home/engine.cpp:224: undefined reference to `mysql_close'
/tmp/ccP8CRmJ.o: In function `ShowBanner(char *, plc)':
/home/engine.cpp:392: undefined reference to `mysql_query'
/home/engine.cpp:419: undefined reference to `mysql_query'
/home/engine.cpp:425: undefined reference to `mysql_query'
/home/engine.cpp:441: undefined reference to `mysql_query'
/home/engine.cpp:446: undefined reference to `mysql_close'
/tmp/ccP8CRmJ.o: In function `main':
/home/engine.cpp:497: undefined reference to `mysql_init'
/home/engine.cpp:498: undefined reference to `mysql_real_connect'
/home/engine.cpp:500: undefined reference to `mysql_select_db'
/home/engine.cpp:513: undefined reference to `mysql_query'
/home/engine.cpp:514: undefined reference to `mysql_store_result'
/home/engine.cpp:515: undefined reference to `mysql_num_rows'
/home/engine.cpp:516: undefined reference to `mysql_fetch_row'
/home/engine.cpp:518: undefined reference to `mysql_free_result'
/home/engine.cpp:549: undefined reference to `mysql_query'
/home/engine.cpp:551: undefined reference to `mysql_store_result'
/home/engine.cpp:568: undefined reference to `mysql_num_rows'
/home/engine.cpp:571: undefined reference to `mysql_fetch_row'
/home/engine.cpp:629: undefined reference to `mysql_free_result'
-bash-2.05b$
R>(gdb) run
R>
Дало
(gdb) run
Starting program: /home/engine.cgi
Program received signal SIGSEGV, Segmentation fault.
0x3c0ffc79 in strlen () from /usr/lib/libc.so.4
(gdb) -bash-2.05b$
R>И функцию с SegFault-ом в студию. И исходничек в студию... Если не один — все в студию...
-bash-2.05b$ gdb engine.cgi
GNU gdb 4.18 (FreeBSD)
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-unknown-freebsd"...Deprecated bfd_read called a
t /usr/src/gnu/usr.bin/binutils/gdb/../../../../contrib/gdb/gdb/dbxread.c line 2
627 in elfstab_build_psymtabs
Deprecated bfd_read called at /usr/src/gnu/usr.bin/binutils/gdb/../../../../cont
rib/gdb/gdb/dbxread.c line 933 in fill_symbuf
А как Вы перекомпилируете обычно программу? запускаете что? У меня скомпилировалось, но т.к. подключиться к SQL без пароля программа не смогла, а двух одинаковых баз не бывает, то она просто корректно вышла.
скажите
-bash-2.05b$ -bash-2.05b$ export CXXFLAGS=$CXXFLAGS -g;
-bash: -bash-2.05b$: command not found
-bash-2.05b$ -bash: export: `-g': not a valid identifier
Здравствуйте, samara, Вы писали:
S>Здравствуйте, raskin, Вы писали:
R>>Здравствуйте, samara, Вы писали:
R>>А как Вы перекомпилируете обычно программу? запускаете что?
S>запускаю: S>
S>-bash-2.05b$ -bash-2.05b$ export CXXFLAGS=$CXXFLAGS -g;
S>-bash: -bash-2.05b$: command not found
S>-bash-2.05b$ -bash: export: `-g': not a valid identifier
S>
-bash-2.05b$ gdb engine.cgi
GNU gdb 4.18 (FreeBSD)
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-unknown-freebsd"...
(no debugging symbols found)...
(gdb) run
Starting program: /home/engine.cgi
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...
Program received signal SIGSEGV, Segmentation fault.
0x3c0ffc79 in strlen () from /usr/lib/libc.so.4
Пожаловался в саппорт, вот ответ:
Segmentation fault свидетельствует о неудачной сборке файла, либо его компоновки. Также такая ошибка иногда появляется когда используется бинарный модуль, собранный на другой UNIX-подобной ОС.
Я попробовал собрать модуль самостоятельно:
bash-2.05b$ g++ engine.cpp -o engine.cgi -lmysqlclient -L/usr/local/lib/mysql -L
/opt/lib/mysql engine.cpp
/tmp/cc5tVLXF.o(.data+0x0): multiple definition of `mysqlhost'
/tmp/ccPII7uH.o(.data+0x0): first defined here
/tmp/cc5tVLXF.o(.data+0x4): multiple definition of `mysqluser'
/tmp/ccPII7uH.o(.data+0x4): first defined here
/tmp/cc5tVLXF.o(.data+0x8): multiple definition of `mysqlpassword'
/tmp/ccPII7uH.o(.data+0x8): first defined here
/tmp/cc5tVLXF.o(.data+0xc): multiple definition of `mysqldatabase'
/tmp/ccPII7uH.o(.data+0xc): first defined here
/tmp/cc5tVLXF.o(.data+0x10): multiple definition of `timeoffset'
/tmp/ccPII7uH.o(.data+0x10): first defined here
/tmp/cc5tVLXF.o(.data+0x14): multiple definition of `defaulti'
/tmp/ccPII7uH.o(.data+0x14): first defined here
/tmp/cc5tVLXF.o(.data+0x18): multiple definition of `defaultu'
/tmp/ccPII7uH.o(.data+0x18): first defined here
/tmp/cc5tVLXF.o(.data+0x1c): multiple definition of `sysname'
/tmp/ccPII7uH.o(.data+0x1c): first defined here
/tmp/cc5tVLXF.o(.data+0x20): multiple definition of `addition'
/tmp/ccPII7uH.o(.data+0x20): first defined here
/tmp/cc5tVLXF.o(.data+0x24): multiple definition of `syswidth'
/tmp/ccPII7uH.o(.data+0x24): first defined here
/tmp/cc5tVLXF.o(.data+0x28): multiple definition of `sysheight'
/tmp/ccPII7uH.o(.data+0x28): first defined here
/tmp/cc5tVLXF.o(.data+0x2c): multiple definition of `htmlreplace'
/tmp/ccPII7uH.o(.data+0x2c): first defined here
/tmp/cc5tVLXF.o(.data+0x30): multiple definition of `sysurl'
/tmp/ccPII7uH.o(.data+0x30): first defined here
/tmp/cc5tVLXF.o: In function `exiterr(int)':
/tmp/cc5tVLXF.o(.text+0x0): multiple definition of `exiterr(int)'
/tmp/ccPII7uH.o(.text+0x0): first defined here
/tmp/cc5tVLXF.o(.data+0x3c): multiple definition of `mysql'
/tmp/ccPII7uH.o(.data+0x3c): first defined here
/tmp/cc5tVLXF.o: In function `decode(char *)':
/tmp/cc5tVLXF.o(.text+0xc0): multiple definition of `decode(char *)'
/tmp/ccPII7uH.o(.text+0xc0): first defined here
/tmp/cc5tVLXF.o: In function `countSymbol(char *, char)':
/tmp/cc5tVLXF.o(.text+0x1dc): multiple definition of `countSymbol(char *, char)'
/tmp/ccPII7uH.o(.text+0x1dc): first defined here
/tmp/cc5tVLXF.o: In function `findSymbol(char *, char, int)':
/tmp/cc5tVLXF.o(.text+0x21c): multiple definition of `findSymbol(char *, char, i
nt)'
/tmp/ccPII7uH.o(.text+0x21c): first defined here
/tmp/cc5tVLXF.o: In function `explode(char **, char *, char)':
/tmp/cc5tVLXF.o(.text+0x280): multiple definition of `explode(char **, char *, c
har)'
/tmp/ccPII7uH.o(.text+0x280): first defined here
/tmp/cc5tVLXF.o: In function `replace(char *, char *, char *)':
/tmp/cc5tVLXF.o(.text+0x494): multiple definition of `replace(char *, char *, ch
ar *)'
/tmp/ccPII7uH.o(.text+0x494): first defined here
/tmp/cc5tVLXF.o: In function `mSF(double)':
/tmp/cc5tVLXF.o(.text+0x5e4): multiple definition of `mSF(double)'
/tmp/ccPII7uH.o(.text+0x5e4): first defined here
/tmp/cc5tVLXF.o: In function `itoa(long)':
/tmp/cc5tVLXF.o(.text+0x624): multiple definition of `itoa(long)'
/tmp/ccPII7uH.o(.text+0x624): first defined here
/tmp/cc5tVLXF.o: In function `timeOut(int)':
/tmp/cc5tVLXF.o(.text+0x660): multiple definition of `timeOut(int)'
/tmp/ccPII7uH.o(.text+0x660): first defined here
/tmp/cc5tVLXF.o: In function `myStrCat(int,...)':
/tmp/cc5tVLXF.o(.text+0x6b4): multiple definition of `myStrCat(int,...)'
/tmp/ccPII7uH.o(.text+0x6b4): first defined here
/tmp/cc5tVLXF.o: In function `cgiInput(void)':
/tmp/cc5tVLXF.o(.text+0x79c): multiple definition of `cgiInput(void)'
/tmp/ccPII7uH.o(.text+0x79c): first defined here
/tmp/cc5tVLXF.o(.data+0x48): multiple definition of `login'
/tmp/ccPII7uH.o(.data+0x48): first defined here
/tmp/cc5tVLXF.o(.data+0x4c): multiple definition of `page'
/tmp/ccPII7uH.o(.data+0x4c): first defined here
/tmp/cc5tVLXF.o(.data+0x50): multiple definition of `state'
/tmp/ccPII7uH.o(.data+0x50): first defined here
/tmp/cc5tVLXF.o(.data+0x34): multiple definition of `allcookies'
/tmp/ccPII7uH.o(.data+0x34): first defined here
/tmp/cc5tVLXF.o: In function `ShowBanner(char *, plc)':
/tmp/cc5tVLXF.o(.text+0x804): multiple definition of `ShowBanner(char *, plc)'
/tmp/ccPII7uH.o(.text+0x804): first defined here
/tmp/cc5tVLXF.o: In function `main':
/tmp/cc5tVLXF.o(.text+0x11b0): multiple definition of `main'
/tmp/ccPII7uH.o(.text+0x11b0): first defined here
/tmp/cc5tVLXF.o(.data+0x40): multiple definition of `res'
/tmp/ccPII7uH.o(.data+0x40): first defined here
/tmp/cc5tVLXF.o(.data+0x44): multiple definition of `row'
/tmp/ccPII7uH.o(.data+0x44): first defined here
/tmp/cc5tVLXF.o(.data+0x60): multiple definition of `place'
/tmp/ccPII7uH.o(.data+0x60): first defined here
/tmp/cc5tVLXF.o(.data+0x80): multiple definition of `cookie'
/tmp/ccPII7uH.o(.data+0x80): first defined here
/tmp/cc5tVLXF.o(.data+0x84): multiple definition of `mres'
/tmp/ccPII7uH.o(.data+0x84): first defined here
/tmp/cc5tVLXF.o(.data+0x88): multiple definition of `pres'
/tmp/ccPII7uH.o(.data+0x88): first defined here
/tmp/cc5tVLXF.o(.data+0x8c): multiple definition of `result'
/tmp/ccPII7uH.o(.data+0x8c): first defined here
Здравствуйте, samara, Вы писали:
S>Скрипт компилируется без ошибок. S>Но при вызове выдает ошибку: Premature end of script headers: /cgi-bin/engine.cgi S>Хотя заголовок должен отдаваться.
S>
S>exit(1);
S>
Код возврата смущает... Попробуйте, все-таки exit(0).
Возможно, серверу не нравится, что скрипт пытается ошибку вернуть. Хотя ошибка странная.
Здравствуйте, samara, Вы писали:
S>Скрипт компилируется без ошибок. S>Но при вызове выдает ошибку: Premature end of script headers: /cgi-bin/engine.cgi S>Хотя заголовок должен отдаваться.
S>Посоветуйте знающие люди.
А зачем тебе писать cgi-ку на С++ ? Пиши на перле или что ты там знаешь, это будет проще и быстрее.
Здравствуйте, samara, Вы писали:
S>Скрипт компилируется без ошибок. S>Но при вызове выдает ошибку: Premature end of script headers: /cgi-bin/engine.cgi S>Хотя заголовок должен отдаваться.
S>Посоветуйте знающие люди.
У вас где фактически находится libmysqlclient? Могу помочь собрать программу "на месте". Если интересно, пишите на мыло в профиле.
Нет ничего невозможного..
Re[9]: Не могу запустьть скрипт
От:
Аноним
Дата:
03.06.05 10:31
Оценка:
Здравствуйте, samara, Вы писали:
S>Здравствуйте, raskin, Вы писали:
S>>>Как запустить нескомпилированный скрипт из консоли? (Раньше SSH пользовался только для редактирования cron) R>>скомпилировать... исходный вариант — который с printf, хотя это не важно. g++ там есть? Или кинуть скомпилироанный и там запустить просто командой R>>
R>>./engine.cgi
R>>
S>Segmentation fault
Только что с проблемой Segmentation Fault(далее SF) столкнулся.
Оказалось что SF выскакивает когда доступ пользователю запрещен.
Например пользователю @localhost доступ запрещен — ставишь в программе host= "127.0.0.1" и появляется SF