Archive for the ‘php’ Category

Podpowiedzi w wyszukiwarce i PHP

Posted on kwiecień 20th, 2008 in php, programowanie | No Comments »

Podpowiedzi w stylu googlowego „Czy chodziło Ci o” to napewno przydatny dodatek do wyszukiwarki. Omówię dzisiaj w skrócie najprostszy znany mi sposób stworzenia takiego mechanizmu. Będziemy potrzebować: PHP4 lub późniejszy z biblioteką pspell. Niestety nie na każdym serwerze hostingowym pspell jest dostępny w standardzie. Na szczęście nie jest on taki rzadki.

Najpierw musimy stworzyć słownik słów użytych na stronie. Poniższy kod dodaje jedno słowo $word do słownika.

PHP:
  1. $pspell_config = pspell_config_create("pl");
  2. pspell_config_personal($pspell_config, "./sugestie2.slownik");
  3. $pspell_link = pspell_new_config($pspell_config);
  4. pspell_add_to_personal($pspell_link, $word); // dodajemy słowo do słownika
  5. pspell_save_wordlist($pspell_link);

Oczywiście gdy chcemy dodać więcej słów, wystarczy użyć pętli.

W poniższym kodzie dosyć istotna jest linia 3. Funkcja pspell_config_dict_dir wymusza na pspellu użycie tylko i wyłącznie naszego słownika. Bez niej funkcja pspell_suggest w wyniku zwróciłaby wszystkie polskie słowa podobne do tego, które zostało wpisane w wyszukiwarkę.

PHP:
  1. $pspell_config = pspell_config_create("pl");
  2. pspell_config_dict_dir($pspell_config, "~/public_html/slownik/");
  3. pspell_config_personal($pspell_config, "./sugestie2.slownik");
  4. $pspell_link = pspell_new_config($pspell_config);
  5.  
  6. $suggestions = pspell_suggest($pspell_link, $word);
  7. foreach ($suggestions as $suggestion) {
  8.     echo "Być może chodziło Ci o: $suggestion<br />";
  9. }

PHP i uruchomienie procesu w tle

Posted on luty 26th, 2008 in linux, php | No Comments »

Czasami zachodzi potrzeba, żeby z poziomu aplikacji WWW napisanej w PHP uruchomić jakąś czasochłonną operację. Może to być na przykład tworzenie kopii zapasowej jakichś danych.

Ponieważ taka operacja może trwać długo, jest bardzo prawdopodobne, że dojdzie do przekroczenia limitu wykonywania strony. W takim przypadku najlepiej uruchomić tą operację w tle.

Na pewnym forum znalazłem, że wystarczy użyć funkcji exec() i na końcu polecenia, które uruchamiamy dodać znak ampersanda &.

PHP:
  1. <?php
  2.    echo exec("sleep 1 && echo Koniec skryptu BASH &");
  3.    echo "\nKoniec skryptu PHP\n";
  4. ?>

Jednak po wykonaniu skryptu widać, że nie działa on tak, jakbyśmy tego chcieli.

CODE:
  1. $ php5 test.php
  2. Koniec skryptu BASH
  3. Koniec skryptu PHP

Aby rozwiązać problem należy posłużyć się innymi funkcjami: proc_open() i proc_close().

PHP:
  1. <?php
  2.    proc_close(proc_open ("sleep 1 && echo Koniec skryptu BASH &", array(), $pipes));
  3.    echo "\nKoniec skryptu PHP\n";
  4. ?>

A wynik wygląda tak.

CODE:
  1. $ php5 test.php
  2. Koniec skryptu PHP
  3. $
  4. Koniec skryptu BASH