Как скрипт Python может узнать путь вызывающего его PHP-файла?

Я выполняю скрипт Python из foo.php, используя exec, и я хочу, чтобы скрипт Python знал, из какого каталога исходит вызов PHP. В этом примере это должно быть: /www/includes

# File tree
/script.py
/www/index.php
/www/includes/foo.php

foo.php

var_dump( exec( "/usr/bin/python /script.py" ) );

script.py

#!/usr/bin/env python

import os

print( os.getcwd() )

Я обнаружил, что os.getcwd() отлично работает, когда URL-адрес foo.php вызывается непосредственно в браузере. Я получаю желаемый результат: /www/includes

Однако это не работает, когда foo.php вызывается из другого файла PHP в другом каталоге, например /www/index.php.

index.php

require_once '/www/includes/foo.php';

Сценарий Python печатает /www, так как именно там живет index.php.

Проблема

Как я могу заставить скрипт Python возвращать /www/includes, когда он выполняется foo.php, независимо от того, как вызывается foo.php? Я пробовал некоторые методы traceback безуспешно, так как я думаю, что это применимо только к ошибкам трассировки.


person Frankie Jarrett    schedule 25.11.2015    source источник
comment
ты не можешь. include() в php действует так, как если бы содержимое включаемого файла было буквально вырезано и вставлено в файл, выполняющий включение. фактически ваш foo.php является ЧАСТЬЮ index.php   -  person Marc B    schedule 25.11.2015
comment
Спасибо МаркБ. Это было очень познавательно.   -  person Frankie Jarrett    schedule 25.11.2015


Ответы (1)


Вам нужно изменить свой рабочий каталог на каталог foo.php, что вы сможете сделать с помощью chdir:

chdir (__DIR__); # change working dir to current directory.

В файле foo.php

person Liam Wiltshire    schedule 25.11.2015
comment
Это сработало. Неудобство этого решения заключается в том, что оно не может быть полностью разрешено в Python, рабочий каталог в основном должен быть подделан в PHP с использованием chdir(). Итак, принимая во внимание комментарий MarcB выше, кажется, что настоящая трассировка никогда не будет возможной, поскольку Python не имеет видимости процесса PHP для включения/требования других файлов. Спасибо вам обоим. - person Frankie Jarrett; 25.11.2015