Я хотел бы знать, есть ли у вас какие-либо идеи / предложения по использованию dbase в PHP.
Вот моя проблема, мне нужно «перевести» скрипт Foxpro в PHP, и я использую dbase, так как мне приходится иметь дело с файлами .DBF. Проблема в том, что PHP требует времени для выполнения скрипта, потому что я не нашел лучшего способа перевести запросы на выборку, чем перебирать весь файл, чтобы выбрать нужные мне данные …
И, очевидно, я дошел до того, что PHP отдает слишком много времени на рендеринг скрипта пользователю. Я знаю, что могу дать серверу больше времени для выполнения PHP, изменив файл php.ini и т. Д., Но это не решение, поскольку позже этот сценарий будет доступен почти каждому пользователю сайта, который я разрабатываю, так что если это может пойти как можно быстрее, чтобы сделать это было бы действительно здорово …
Итак, подведем итог: что я могу сделать, чтобы ускорить выполнение PHP-запросов к файлам .dbf? Как бы вы перевели запросы SELECT Foxpro в PHP? Вы рекомендуете мне сделать этот скрипт на другом языке, чем PHP?
Я привожу вам пример того, что мне нужно перевести, это лишь малая часть того, что мне нужно перевести, и файлы .dbf содержат не менее 50 000 строк и не менее 10 столбцов в каждой: /
FUNCTION
PARAMETERS n_pc_id, l_pc_euro, n_sf_id, l_contrat
PRIVATE tb_res, mwhere
DIMENSION tb_res[1]
STORE 0 TO tb_res
IF n_sf_id = 0
IF l_contrat
mwhere = "lig_mo.lo_gar = 'T' AND mo.mo_sf_id != m.pa_sfd_id"ELSE
mwhere = "lig_mo.lo_gar != 'T' AND mo.mo_sf_id != m.pa_sfd_id"ENDIF
ELSE
IF l_contrat
mwhere = "lig_mo.lo_gar = 'T' AND mo.mo_sf_id = n_sf_id"ELSE
mwhere = "lig_mo.lo_gar != 'T' AND mo.mo_sf_id = n_sf_id"ENDIF
ENDIF
SELECT SUM(lig_mo.lo_qte);
FROM mo, lig_mo;
WHERE mo.mo_id = lig_mo.lo_mo_id;
AND (lig_mo.lo_pc_id = n_pc_id;
AND &mwhere;
AND lig_mo.lo_mo_id != 99999999);
AND lig_mo.lo_type IN ('F','V','B');
INTO ARRAY tb_res
RETURN tb_res[1]
Вы определенно не хотите делать это на основе строки. Я бы посмотрел на это обсуждение доступ к файлам DBF из PHP, затем вы можете передать (предположительно, оптимизированный по Rushmore) запрос выше прямо в него, изменив его на использование параметров запроса.
Других решений пока нет …