2017-02-12 10 views
-1

На PHP У меня есть одна очень конкретная ситуация.PHP - получить переменные, определенные во включенном файле

Представьте У меня есть следующий код:

index.php

<? 
$a = "1"; 
$b = "2"; 
include("other.php"); 
$c = "3"; 
$d = "4"; 
?> 

other.php

<? 
$x = "11"; 
$y = "12"; 
?> 

Тогда представьте себе, что я не иметь Код rce файла: other.php (это кажется странным, но предположим, что). Затем я хотел бы, исходя из исходного кода: index.php, получить некоторую информацию о переменных, определенных на other.php, или, возможно, в исходном коде. Мои требования не позволяют мне открыть содержимое файла: «other.php».

Могу ли я сохранить состояние системы до и после вызова: other.php, а затем сделать государственную субстрацию, чтобы увидеть, что изменилось?

К несчастью, я не могу манипулировать файлом: other.php.

[UPDATE]

Моей проблема, потому, что у меня есть сайт с зашифрованным файлом (по коде выше это: other.php). Эта кодировка выполняется с помощью Zend Guard Loader. Что Zend делает здесь, это взять кодированный код внизу следующего фрагмента кода и в какой-то момент преобразовать его в исходный код PHP, а затем выполнить его как исходный код. У меня нет исходного исходного кода, просто кодированного кода.

Тогда я хотел бы как-то получить исходный код этого файла.

Проблема в том, что на этом коде могут быть определены функции, переменные со статическими назначениями и переменные с динамическими назначениями (получение значений из результатов функции).

Идеальным для меня будет получение исходного кода каким-то образом.

Веб-сайт работает правильно, поэтому декодирование выполняется правильно.

<?php @Zend; 
4123; 
/* This is not a text file */ 
print <<<EOM 
<html><body><a href="http://www.zend.com/products/zend_guard"><img border="0" src="http://www.zend.com/images/store/safeguard_optimizer_img.gif" align="right"></a><center><h1>Zend Optimizer not installed</h1></center><p>This file was encoded by the <a href="http://www.zend.com/products/zend_guard">Zend Guard</a>. In order to run it, please install the <a href="http://www.zend.com/products/zend_optimizer">Zend Optimizer</a> (available without charge), version 3.0.0 or later. </p><h2>Seeing this message instead of the website you expected?</h2>This means that this webserver is not configured correctly. In order to view this website properly, please contact the website's system administrator/webmaster with the following message:<br><br><tt>The component "Zend Optimizer" is not installed on the Web Server and therefore cannot service encoded files. Please download and install the Zend Optimizer (available without charge) on the Web Server.</tt><br><br><b>Note</b>: Zend Technologies cannot resolve issues related to this message appearing on websites not belonging to <a href="http://www.zend.com">Zend Technologies</a>. <h2>What is the Zend Optimizer?</h2><p>The Zend Optimizer is one of the most popular PHP plugins for performance-improvement, and has been available without charge, since the early days of PHP 4. It improves performance by scanning PHP's intermediate code and passing it through multiple Optimization Passes to replace inefficient code patterns with more efficient code blocks. The replaced code blocks perform exactly the same operations as the original code, only faster. </p><p>In addition to improving performance, the Zend Optimizer also enables PHP to transparently load files encoded by the Zend Guard. </p><p>The Zend Optimizer is a free product available for download from <a href="http://www.zend.com">Zend Technologies</a>. Zend Technologies also developed the PHP scripting engine, known as the <a href="http://www.zend.com/products/zend_engine">Zend Engine</a>.</p></body></html> 
EOM; 
exit(); 
__halt_compiler(); 

2003120702‚–ÛUÕ_Eq7X-‡äÂK.½Iëoôïîuolÿ@f*vÈ9õ]¾2003120702‚–ÛUÕ_Eq7X-‡äÂK.½Iëoôïîuolÿ@f*vÈ9õ]¾2003120702‚–ÛUÕ_Eq7X-‡äÂK.½Iëoôïîuolÿ@f*vÈ9õ]¾2003120702‚–ÛUÕ_Eq7X-‡äÂK.½Iëoôïîuolÿ@f*vÈ9õ]¾ 
... the code continues ... 
+0

[get_defined_vars()] (http://de2.php.net/manual/en/function.get-defined-vars.php) до и после 'include' индекса .php, [array_diff()] (http://www.php.net/array_diff) на этом и вуаля. – ccKep

+0

позволяет предположить, что other.php содержит 'exec ('soemthing bad');' dont запускать php-файлы, если вы не знаете, что в них – nogad

+1

, поэтому вы в основном хотите украсть, файл был закодирован по какой-то причине – nogad

ответ

0

Это может помочь (обратите внимание, что я добавил содержание включаемых непосредственно, так что код является работоспособным с некоторым результатом ... был бы еще просто включаемая в этом случае):

<?php 

$a = 1; 
$b = 2; 

$preVars = null; // Define it so it doesn't show up later 
$preVars = array_keys(get_defined_vars()); 

// Normally included, just here for tests sake 
$x = 10; 
$y = 11; 
// End of your include 

$postVars = array_keys(get_defined_vars()); 

$c = 3; 
$d = 4; 

$diff = array_diff($postVars, $preVars); 

echo "New Variables:\n"; 
foreach($diff as $d) 
echo "- \$".$d."\n"; 

Выход:

New Variables: 
- $x 
- $y 
+0

спасибо ccKep, я сделал обновление к своему сообщению о моей реальной причине. Ваш ответ очень близок к тому, что мне нужно, но я думаю, что он не применяется точно, когда на включенном файле есть назначение переменных из результата функций. – Angel

+0

Пока переменные можно использовать после включения (т. Е. Они находятся в глобальной области), это должно работать нормально - неважно, откуда берутся значения. – ccKep