Как оптимизировать исследование файлов .dbf с помощью dbase в PHP?

1

Я хотел бы знать, есть ли у вас некоторые идеи/предложения об использовании dbase в PHP.

Здесь моя проблема, я должен "перевести" скрипт Foxpro в PHP, и я использую dbase, так как мне приходится иметь дело с файлами.DBF. Проблема заключается в времени, которое требуется для выполнения PHP скрипта, потому что я не нашел лучшего способа перевода выбранных запросов, а не итерации по всему файлу, чтобы выбрать нужные мне данные...

И, очевидно, я дошел до того, что для PHP-скрипта пользователю требуется слишком много времени. Я знаю, что я могу дать серверу больше времени для выполнения PHP, изменив файл php.ini и т.д., Но это не решение, так как этот скрипт позже будет доступен почти каждому пользователю сайта, который я разрабатываю, поэтому, если он может идти как можно быстрее, чтобы сделать это действительно здорово...

Итак, чтобы подвести итог, что я могу сделать, чтобы получить более быстрое время выполнения с PHP на.dbf файлах? Как бы вы перевели запросы Foxpro SELECT в 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
timeout
foxpro
dbase

1 ответ

0

Вы определенно не хотите, чтобы это делалось подряд. Я бы посмотрел на это обсуждение доступа к файлам DBF с PHP, тогда вы можете передать запрос (предположительно Рашмор-оптимизированный) прямо на него, изменив его для использования параметров запроса.

  • 0
    Спасибо за ваш ответ, но решение, которое вы дали, похоже, подразумевает, что я могу напрямую подключиться к базе данных, и я не могу этого сделать, по крайней мере сейчас. Так что я просто собираюсь найти решение, и если я смогу напрямую подключиться к базе данных, я непременно буду использовать ODBC или PDO_ODBC с ODBC Manager

Ещё вопросы

Сообщество Overcoder
Наверх
Меню