Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 Изпълнение на IXSSO заявки от PHP инсталиран на MS-Windows сървър
  1. Microsoft Indexing Service от PHP
     
Автор  plamenSm (09.04.2008 11:15)  съобщение до автора
Погледнат  1349 пъти  добави към любими
Оценка  добави коментар
Гласове  1  изпрати на приятел
Коментари  (0)  абонирай се за PHP
    Страница 1 / 1

 



Оказва се, че трудно може да се намери информация за това как може да се комуникира с Microsoft Indexing Service от PHP. Дори много PHP програмисти не знаят за тази възможност. Ако имате PHP сайт стартиран на Windows сървър и имате документи, които трябва да се намират по зададен критерий, тази възможност може да ви помогне в голяма степен.

Вероятно главната причина за оскъдната информация по въпроса е че PHP общността е основно общност, подкрепяща отворения код, докато Microsoft се оказва на другия полюс. По-голямата част от PHP сайтовете са стартирани на Apache web-сървъри върху Linux ОС, която няма вградена индексна система за файловете.

Тези, които искат да разберат възможно ли е използването на IXSSO заявки в PHP страниците и как точно става, ще бъдат доволни да узнаят, че това става чрез създаване на IXSSO COM обект, по начин подобен на този в класическа ASP страница.

Създаването на каталог в който да се търси чрез Indexing Service е привлекателна идея като за начало, но да направим коректно работещ такъв е отделен въпрос. Има някои дребни детайли, които могат да объркат всичко. За повече информация относно правилното създаване на каталог, можете да погледнете тук: setting up an Indexing Service catalog.

И така, можете да създадете IXSSO.Query и IXSSO.Util обекти точно по същия начин, както в ASP разбира се с разликата, че трябва да се спази PHP синтаксиса.Тоест вместо „Server.CreateObject” ще използваме „new COM()”:

CODE
1
2
3
4
<?php
$Q = new COM("ixsso.Query");
$util = new COM("ixsso.util");
?>

Сега имаме IXSSO обекти и достъп до всички техни свойства и методи, като спазваме PHP синтаксиса естествено. Първо трябва да зададем кой каталог ще използваме чрез Indexing Service:

CODE
1
2
3
<?php
$Q->Catalog = "myCatalog";
?>

Както се вижда, просто задаваме името на каталога.

Следва да зададем какво ще търсим. В повечето случаи това е съдържанието (атрибут value) на текст-бокс (<input type="text"…>) за търсене, разположен някъде в страницата:

CODE
1
2
3
<?php
$Q->Query = "My Search Terms";
?>

Бихме могли да използваме Indexing Servers Advanced Query Language тук, но това излиза извън рамките на темата в този урок.

Следващото важно нещо е да зададем кои колони искаме да получим в резултат на заявката.

CODE
1
2
3
<?php
$Q->Columns = "filename, rank, vpath, path, DocTitle, characterization, All";
?>

Можете да създадете и custom meta data columns във вашите документи и да ги дефинирате чрез Indexing Service.

„Characterization” е една от проблемните колони, чиито колони почти винаги съдържат некоректни данни. Това е една от важните колони. Тя съдържа обща информация за документа, така че проверете дали колоната връща коректно данните.

И още: ако имате PDF файлове във вашия каталог уверете се, че имате инсталиран „Adobe IFilter”.

Последното, което трябва да направим преди да изпълним заявката е да зададем колоната по която искаме да е сортиран резултатът и максималния брой записи:

CODE
1
2
3
4
<?php
$Q->SortBy = "rank[d]";
$Q->MaxRecords = 200;
?>

Логично е да желаете документите за които има най-добро съвпадение да бъдат най-напред в списъка. Колоната „rank” носи информация за степента на съвпадение. Така, че сортираме по „rank”.

Ограничение до 200 реда, показано тук изглежда малко, но за практическо използване това е нормална стойност. Повече редове биха накарали потребителя за се откаже от „ровене” и да стартира търсене с по-точен критерий.

След като сме задали всички необходими параметри, сме готови да изпълним заявката:

CODE
1
2
3
<?php
$fileRS = $Q->CreateRecordSet("nonsequential");
?>

Този ред ще върне резултата във вид на указател към обект с редовете (result set). Сега можем чрез цикъл да вземем редовете един по един. По-долу е показан примерен код за това. Предполагаме, че таблицата, заглавния ред и затварящите тагове са написани. Тук за краткост показваме само оформянето на редовете:

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
$i = $fileRS->RecordCount;

if( $i != 0 )
{
   
$fileRS->MoveFirst();

   
while($i < $fileRS->RecordCount)
    {
       
echo ('<tr><td style="width: 100px;">'
         .
$fileRS->fields['rank']->value
         .
'</td><td><a href="MyPath/'
         .
$fileRS->fields['filename']->value.'">'
         .
$fileRS->fields['DocTitle']->value
         .
'</a></td><tr>');

   
$fileRS->MoveNext();
   
$i++;
   
}
}
else
{
   
echo('<tr>
            <td colspan=2 style="color:red; text-align:center;">
                Няма намерени документи.
            </td>
        </tr>
');
}
?>


Премесването на вътрешния указател за текущия ред в началото не е необходимо ( $fileRS->MoveFirst() ), но добрия стил го изисква. Представете си, че оформите този цикъл във функция. Няма как да сте сигурни, че резултатът е не е използван някъде по рано в кода.

Това е всичко необходимо за да направите търсене на документи по зададен критерий чрез PHP инсталиран на MS Windows и с използването на Microsoft Indexing Service.



Източник: dynamicajax.com



   


Ключови думи: PHP IXSSO заявки MS Windows сървър COM обект


Още уроци от тази рубрика


 
  • Подобни теми от myLinks
 

 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

 

 
  • Интересно от Софтуер
 



IT-PLACE.NET © 2004 - 2008