2015-05-26 3 views
1

Я хотел бы знать, есть ли у вас некоторые идеи/предложения об использовании dbase в PHP.Как оптимизировать исследование .dbf-файлов с помощью 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] 

ответ

0

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

+0

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

Смежные вопросы