parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Наблюдаю путаницу

G_Z 19.05.2016 21:57

Возможно, в своей голове.

Структура директорий:
www
   scripts
          parser.sh
          test
              first.html
              second.html
Document-root — www.

parser.sh:
#!/usr/bin/env bash

pushd /Users/gz/Documents/web/site/www > /dev/null
/Users/gz/Documents/web/cgi-bin/parser345/parser3.cgi $@
popd > /dev/null
Идём в /www/scripts, зовём first.html:
sh parser.sh ../scripts/test/first.html

first.html:
@auto[filespec]
$MAIN:filespec[$filespec]


@main[]
$starter[/../scripts/parser.sh]
$file[../scripts/test/second.html]

^if(^file.left(1) eq '/'){
	$root[$request:document-root]
}{
	$root[^file:dirname[$filespec]/]
}

$path[${root}$file]

$result[filespec: $filespec
root: $root
file: $file (^if(-f $file)[exists;missing])
path: $path

exec: $starter $file

$response[^file::exec[$starter;;$file]]

status: $response.status
stderr: $response.stderr
text: $response.text]
second.html:
@main[]
$now[^date::now[]]
$log[^now.sql-string[] executed]
^log.save[/starter.log]
Вопрос: работают ли абсолютные пути (относительно document-root) в вызванном файле?
Судя по тестам — работает только относительное указание.

Задаём $file[../scripts/test/second.html] получаем корректный вызов:
$ sh parser.sh ../scripts/test/first.html
filespec: /Users/gz/Documents/web/site/www/../scripts/test/first.html
root: /Users/gz/Documents/web/site/www/../scripts/test/
file: ../scripts/test/second.html (missing)
path: /Users/gz/Documents/web/site/www/../scripts/test/../scripts/test/second.html

exec: /../scripts/parser.sh ../scripts/test/second.html

status: 0
stderr: 
text: 
second.html запускается и пишет в лог.
Сработал относительный путь (что характерно, от document-root, а не от текущего исполняемого файла).
При этом, текущий файл вызываемого не находит (missing).

Задаём $file[/../scripts/test/second.html] получаем некорректный вызов:
$ sh parser.sh ../scripts/test/first.html
filespec: /Users/gz/Documents/web/site/www/../scripts/test/first.html
root: /Users/gz/Documents/web/site/www/
file: /../scripts/test/second.html (exists)
path: /Users/gz/Documents/web/site/www//../scripts/test/second.html

exec: /../scripts/parser.sh /../scripts/test/second.html

status: 0
stderr: 
text: 
second.html не запускается, никах ошибок нет, сам парсер файл видит (exists).
Абсолютный путь от document-root не сработал.

Быть может сработает относительный путь от текущего исполняемого файла?
$file[second.html] получаем ошибку:
file.missing

read failed: No such file or directory (2), actual filename '/Users/gz/Documents/web/site/www/second.html'
Очевидно, файл искался от document-root, а не от текущего файла.

http://www.parser.ru/docs/lang/filecgiexec.htm Говорит нам «Внимание: все пути в парсере указываются относительно текущего исполняемого файла.
По аналогии, при запуске внешнего скрипта текущим каталогом для него является каталог, где находится этот скрипт».
Но «Абсолютный путь начинается слешем, а файл ищется от корня веб-пространства. Файл по относительному пути ищется от каталога, в котором находится запрошенный документ» и абсолютный путь в exec прекрасно работает.

Сработал только относительный путь от document-root.

OS X 10.11.4 x64.
Parser 3.4.5.