Global search - indexace DOC a PDF

Global search - indexace DOC a PDF na systémech s Windows - řešení

autor Tomáš Nosek -
Počet odpovědí: 0
Nefunkční indexace DOC a PDF na systémech s Windows

Pokud cesta ve Windows obsahuje mezery např. "C:\Program Files", musí být zadána v uvozovkách, jinak jí příkazový interpret nerozumí. Problém ovšem nastává, když se v příkazu vyskytnou uvozovky dvoje. Takový příkaz je třeba spustit speciálně:

CMD /k ""c:\batch files\test.cmd" "Parameter 1 with space" "Parameter2 with space""

Moodle s touto eventualitou zřejmě nepočítá, proto jsem si napsal následující funkce do externího souboru _winfix.php - programátoři prominou zubit se:

<?php
function win_path_fix ($path) {
if (stristr($_SERVER [SERVER_SOFTWARE], 'WIN')) {
// Is the server os Win?
$path=str_replace('"','',str_replace ('/','\\',$path));
$pos=strpos($path, '.exe');
if ($pos !== false) {
$command=substr($path,0,$pos+4);
$parameters=substr($path,$pos+4,strlen($path));
$path='"'.trim($command).'"'.$parameters;
}
else {
$path='"'.trim($path).'"';
}
return $path;
}
else {
return $path;
}
}

function command_fix ($command){
if (stristr($_SERVER [SERVER_SOFTWARE], 'WIN')) {
// Is the server os Win?
return 'cmd /k "'.$command.'"';
}
else {
return $command;
}
}
?>

Soubor jsem umístil do "kořenový adresář Moodlu"/search/documents a soubory physical_doc.php a physical_pdf.php upravil následujícím způsobem - původní řádek jsem zakomentoval a nad něj vložil winfix:

------------------------------------------------------------
//physical_doc.php počínaje řákdem 40
//winfix
include_once "./search/document/_winfix.php";
$text_converter_cmd = command_fix(win_path_fix("{$moodleroot}{$command} -m UTF-8.txt")." ". win_path_fix($file));

//$text_converter_cmd = "{$moodleroot}{$command} -m UTF-8.txt $file";
if ($CFG->block_search_word_to_text_env){
------------------------------------------------------------
//physical_pdf.php počínaje řádkem 45
// winfix
include_once "./search/document/_winfix.php";
$text_converter_cmd = command_fix(win_path_fix("{$moodleroot}{$command}")." ". win_path_fix($file)." -");

//$text_converter_cmd = "{$moodleroot}{$command} $file -";
$result = shell_exec($text_converter_cmd);
------------------------------------------------------------