powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
25 сообщений из 34, страница 1 из 2
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39749193
UserIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня всем! Возникла следующая проблема.
Использую web-сервер Apache и БД MySQL на ОС Windows 2012.
Настроил на запуск скрипт cgi, который выполняет запрос из БД.
Скрипт отрабатывает локально (при запуске через командный файл) и на других web-серверах, но вот Apache не даёт подключиться к БД при запуске скрипта CGI (index.cgi).
Помогите настроить Apache для корректного запуска файла index.cgi.
Файл cgi отрабатывает корректно, т.е. сам Apache настроен на обработку скриптов, но вылетает именно на моменте, когда идёт открытие соединения к БД mySQL.
Этот же скрипт пробовал запускать на другом веб-сервера - отрабатывает корректно!
Что не так? )
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39749198
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UserITApache не даёт подключиться к БДКак не дает... Это ну совсем не апачево дело. В логах что?
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39749287
UserIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

В логах следующее:
[Tue Dec 18 09:58:30.049595 2018] [cgi:error] [pid 2688:tid 964] [client *.*.*.*:58632] End of script output before headers: index.cgi

Такой момент обратил сейчас ещё.
В логах mySQL при УСПЕШНОМ обращении к базе из моего скрипта (если не через браузер) вот такой лог выдаётся:
"User@localhost on mybd using SSL/TLS"
<...>

А когда через браузер идёт обращение к скрипту в логах mySQL ничего не пишется... И это понятно,т.к. соединение обрубается на момент открытия.

Также от ошибки в логах Apache типа: " End of script output before headers..." - я избавляюсь, если полный скрипт браузеру подсовываю, где все заголовки страницы есть, а вот само подключение так и отваливается. Уже либо совсем без записей в лог Apache либо с ошибкой, что скрипт отработался с ошибкой.
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39749330
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UserIT,

Получается, апач вполне нормально обращается к скрипту, запускает его, но не дожидается корректного ответа от скрипта. Скорее всего, cgi-скрипт аварийно завершает работу.
В принципе, родитель (в данном случае, вебсервер) может убить запущенный процесс, однако, он написал бы об этом в логе, скорее всего.
Связано ли это непосредственно с выполнением подключения к СУБД (открытие сокета, авторизация) или происходит раньше (например, при загрузке какой-то библиотеки, модуля и т.п.) - это не понятно. Наверно, только отладка скрипта прольет какой-то свет.
Что скрипт работает на другой машине - это, скорее всего, вполне можно объяснить различными версиями используемого ПО (могут быть какие-то зависимости с версиями библиотек, например) и/или различным окружением, правами доступа. Есть смысл попробовать сравнить. Возможно, для отладки проще написать тестовый скрипт.
Кроме того, на сервере могут быть настроены какие-то ограничения, например, по использованияю памяти или времени выполнения процесса - такие действия в системном логе должны быть отмечены.

UserITФайл cgi отрабатывает корректноЭто утверждение на чем основано, и речь идет о запуске на другом сервере или на проблемном? Если на проблемном - то запуск производится в тех же условиях (пользователь, окружение), что и при запуске от вебсервера или в иных?
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39749338
UserIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,
На одной и той же машине ставил и Apache, потом его отключал, запускал другой веб-сервер (Tiny).
C Apache результат отрицательный, а с Tiny скрипт отработал.
Скрипт для отладки упростил до самого просто (открыть БД и запросить одну запись). На моменте ADOConnection.Open - скрипт отваливается.
Драйвера тоже пытался настроить по-разному и для 32бит и для 64 бит.
В пуле пользовательских и системных настроек (я про odbc), даже сделал и там и там один и тот же источник с одинаковым именем - не помогает.
Я копал ещё в скрипте, как открывается подключение...
Т.е. доходит до обращение к драйверу и тут отваливается, как будто его просто нет в системе...
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39749340
UserIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так и есть, скрипт аварийно завершает свою работу :)
На строке ADOConnection.Open.
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39749344
UserIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleUserIT,

UserITФайл cgi отрабатывает корректноЭто утверждение на чем основано, и речь идет о запуске на другом сервере или на проблемном? Если на проблемном - то запуск производится в тех же условиях (пользователь, окружение), что и при запуске от вебсервера или в иных?

Права и окружение тоже самое: на том же диске и на той же машине.
От Tiny запуск прошёл корректно, и с локального браузера и с удалённого.
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39749346
UserIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может быть есть какой-то дебагер, который покажет, как происходило обращение к mySQL драйверу и на чём он отказался работать. Это же стандартная api-функция windows: "ADOConnection.Open".
Т.е. почему именно на Apache отключается - загадки, возможно идёт какой-то конфликт.
Сниферы портов все уже перепробовал: стандартные обращения по http... но доп. информации никакой не получил.
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39749357
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UserITПрава и окружение тоже самое: на том же диске и на той же машине.
От Tiny запуск прошёл корректноОкружение посмотрите внимательно, сравните все переменные. Вебсерверы таки разные.

UserITНа строке ADOConnection.Open.UserITТ.е. доходит до обращение к драйверу и тут отваливается, как будто его просто нет в системе...Не в разрядности ли проблема? На винде для 32 и для 64 разные драйверы.
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39749431
UserIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,
Я пробовал разные драйвера 32- и 64бит, могу ещё раз для чистоты эксперимента настроить разные драйвера...
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39749452
UserIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,
Сейчас ещё раз попробовал разные драйверы.
По идее мой скрипт должен работать с 32бит, но корректно отрабатывает, как с 32- так и с 64-бит, если запустить вне браузера.
Через браузер ни так и ни сяк.
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39749545
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UserITСкрипт отрабатывает локально (при запуске через командный файл) и на других web-серверах, но вот Apache не даёт подключиться к БД при запуске скрипта CGI (index.cgi).
Я бы для начала в качестве CGI скрипта попробовал использовать shell скрипт. Потому что кто ж знает, что там за интерпретатор у твоего index.cgi...
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39749655
UserIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
CGI на Delphi - консольное приложение.
у меня Windows... Если мне делать какой-то скрипт, тогда надо чтобы не требовало доп.установок... для эксперимента устанавливать на сервер доп.ПО не очень хочется.
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39749809
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UserITCGI на Delphi - консольное приложение.Эх... Исходники то есть, хоть какая-то отладка возможна?

UserITу меня Windows...Это ещё ничего, это ещё жить можно. Вот на работе коллега говорит "у меня лапки" - вот тут уже всё.

UserITЕсли мне делать какой-то скрипт, тогда надо чтобы не требовало доп.установок... для эксперимента устанавливать на сервер доп.ПО не очень хочется.Ну дык худо-бедно в винде есть свой командный интерпретатор cmd.exe. Есть ещё вполне себе ничего VSH. О, для особых ценителей - почти штатный PowerShell.
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39749810
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, вроде и не спросонок, а ляпнул не ту букву. Конечно, про WSH думал
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39749909
UserIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleЭх... Исходники то есть, хоть какая-то отладка возможна?
Конечно есть! )
я же говорю, что именно при открытии соединения к БД и появляется ошибка :)
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39750061
UserIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа!
Написал cgi на vbs.
Всё тоже самое. Только теперь Apache выдаёт ещё одну ошибку:
ADODB.Connection: \x8d\xa5 \xe3\xa4\xa0\xa5\xe2\xe1\xef \xad\xa0\xa9\xe2\xa8 \xe3\xaa\xa0\xa7\xa0\xad\xad\xeb\xa9 \xaf\xae\xe1\xe2\xa0\xa2\xe9\xa8\xaa. \x82\xa5\xe0\xae\xef\xe2\xad\xae, \xae\xad \xe3\xe1\xe2\xa0\xad\xae\xa2\xab\xa5\xad \xad\xa5\xaf\xe0\xa0\xa2\xa8\xab\xec\xad\xae.

Или что в перекодировании означает:
ADODB.Connection: Не удается найти указанный поставщик. Вероятно, он установлен неправильно.

(!)
Вот... т.е. изначально эта ошибка и выдавалась в моём оригинале, видимо. Но локально (запуская скрипт руками из этой же папки) скрипт отрабатывает верно...
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39750095
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UserIT,

Ожидаемо. Вот и смотрите внимательно окружение и права. При запуске ручками от имени рядового пользователя (включая администратора) оно одно получаются, при запуске из-под вебсервера (служба, да?) - другое.
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39750197
UserIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,
Все эти факторы максимально проверил:
1. Запускал Apache как службу,
2. Запускал Apache от вошедшего пользователя,
3. Запускал Apache от имени администратора,
4. Запускал Apache как службу от имени пользователя,
5. Настраивал ODBC для 32- и 64-разрядных систем...
Результата нет...
Где ещё копать даже не представляю :)
Какие ещё варианты посмотреть можно, есть идеи? :)
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39750226
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UserITКакие ещё варианты посмотреть можно, есть идеи? :)
Прекратить пляски с бубном и прочитать документацию Апача. Учётка и права с которыми он запускается, не имеет ничего общего с окружением и правами с которыми он запускает CGI.

А из-за последнего пункта - ещё и букварь по функционированию компьютеров. Разрядность бибилиотек жёстко определяется разрядностью приложения. Ну, заодно можно просветиться на предмет различий между User DSN и System DSN.
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39750235
UserIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovНу, заодно можно просветиться на предмет различий между User DSN и System DSN.
Настройки User DSN и System DSN проверил в самом начале возникновения проблемы.
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39750243
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UserITКакие ещё варианты посмотреть можно, есть идеи? :)Посмотрите http://httpd.apache.org/docs/2.4/mod/mod_suexec.html По крайней мере, если требуется лишь сменить пользователя.
Ну и то, от чего Вы всё время увильнуть пытаетесь, тоже можно настроить: http://httpd.apache.org/docs/2.4/mod/mod_env.html
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39750520
UserIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,
Спасибо за ссылки! Но я это всё видел на других сайтах, но посмотрю ещё раз.
Сделал скрипт для просмотра переменных и окружения вебсервера.
Поможете разобраться, где что подкрутить? :)
Вот переменные CGI:

QUERY_STRING =
REQUEST_METHOD = GET
GATEWAY_INTERFACE = CGI/1.1
REMOTE_ADDR = *.*.196.31
REMOTE_PORT = 59849
REMOTE_HOST =
SERVER_NAME = *.*.196.31
SERVER_PORT = 80
SERVER_ADDR = *.*.*.*
SERVER_PROTOCOL = HTTP/1.1
SERVER_SOFTWARE = Apache/2.4.37 (Win32)
SCRIPT_NAME = /cgi-bin/index.cgi
SCRIPT_FILENAME = C:/www/root/html/cgi-bin/index.cgi
PATH_INFO =
PATH_TRANSLATED =
CONTENT_TYPE =
CONTENT_LENGTH =
AUTH_TYPE =
REMOTE_USER =
DOCUMENT_ROOT = C:/www/root/html/
SERVER_ADMIN = admin@example.com
SERVER
_SIGNATURE =
HTTP_CONNECTION = keep-alive
HTTP_ACCEPT_LANGUAGE = ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
HTTP_HOST = *.*.196.31
HTTP_USER_AGENT = Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
HTTP_ACCEPT_LANGUAGE = ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
HTTP_ACCEPT_ENCODING = gzip, deflate
HTTP_ACCEPT_CHARSET =
HTTP_CONNECTION = keep-alive
HTTP_REFERER =
HTTP_X_FORWARDED_FOR =
QUERY_STRING_UNESCAPED =
REQUEST_URI = /cgi-bin/index.cgi
DOCUMENT_NAME =
DOCUMENT_URI =
LAST_MODIFIED =
DATE_LOCAL =
DATE_GMT =
SERVER_PROTOCOL = HTTP/1.1
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39750523
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UserIT,

Я дико извиняюсь за проблемы с моим зрением, но в этом списке никак не могу разглядеть виндовые переменные окружения, такие как %TMP%, %PATH%, ну и и ещё с десяток примерно стандартных, которые могут понадобятся консольному приложению для работы.
Или они гарантировано не понадобятся приложению и поэтому Вы их не приводите?
Или их просто нет?
...
Рейтинг: 0 / 0
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
    #39750536
UserIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleЯ дико извиняюсь за проблемы с моим зрением, но в этом списке никак не могу разглядеть виндовые переменные окружения, такие как %TMP%, %PATH%, ну и и ещё с десяток примерно стандартных, которые могут понадобятся консольному приложению для работы.
Или они гарантировано не понадобятся приложению и поэтому Вы их не приводите?
Или их просто нет?

При запуске скрипта из браузера эти переменные выводятся в основном пустыми:

APPDATA =
COMMONPROGRAMFILES =
COMPUTERNAME =
COMSPEC = C:\Windows\system32\cmd.exe
HOMEDRIVE =
HOMEPATH =
LOGONSERVER =
NUMBER_OF_PROCESSORS = 2
OS =
PATH =
PATHEXT = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE =
PROCESSOR_IDENTIFIER =
PROCESSOR_LEVEL =
PROCESSOR_REVISION =
PROGRAMFILES =
SESSIONNAME =
SYSTEMDRIVE =
SYSTEMROOT = C:\Windows
TEMP =
TMP =
USERDOMAIN =
USERNAME =
USERPROFILE =


а вот если запустить консольное приложение тогда получаю примерно так:

TEMP = C:\Users\Alex\AppData\Local\Temp\2
TMP = C:\Users\Alex\AppData\Local\Temp\2
PATH = C:\Users\Alex\AppData\Local\Temp\2
ALLUSERSPROFILE = C:\ProgramData
APPDATA = C:\Users\Alex\AppData\Roaming
COMMONPROGRAMFILES = C:\Program Files (x86)\Common Files
COMPUTERNAME = Example
COMSPEC = C:\Windows\system32\cmd.exe
HOMEDRIVE = C:
HOMEPATH = \Users\Alex
LOGONSERVER = \\Example
NUMBER_OF_PROCESSORS = 2
OS = Windows_NT
PATH = Windows_NT
PATHEXT = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROGRAMFILES = C:\Program Files (x86)
SESSIONNAME = RDP-Tcp#32
SYSTEMDRIVE = C:
SYSTEMROOT = C:\Windows
TEMP = C:\Users\Alex\AppData\Local\Temp\2
TMP = C:\Users\Alex\AppData\Local\Temp\2
USERDOMAIN = Example
USERNAME = Alex
USERPROFILE = C:\Users\Alex
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]