我目前正在研究一個非常大的項目,並且很快就要完成它,並且我面臨嚴重的問題。程序員以非常奇怪的方式編寫了最後一個定義的變量 - 配置變量並不都在同一個文件中,它們遍佈整個500多個文件和100k +代碼行的項目,我正在一時間搞清楚某個變量在哪裏,所以我可以解決一個問題。
有沒有辦法跟蹤這個變量?我相信他正在使用SMARTY(我不能忍受,由於這樣的問題),而變量是一個模板變量。我相當確定,我正在尋找的變量最初被定義爲一個PHP變量,然後該變量被傳遞到SMARTY,所以我想跟蹤一個PHP,但是如果這是不可能的 - 我怎麼跟蹤在他爲SMARTY定義變量的位置?
P.S.我在Vista中,並沒有ssh訪問服務器,所以'grep'是不可能的。找到在PHP(和/或SMARTY)中定義變量的位置?
回答
這類事情是我在我的所有Windows機器上安裝Cygwin的首要原因。
grep myvariablename `find project_dir -name "*.php"`
我無法想象沒有工作的編程grep
。
這不是一個完美的解決方案,但我發現agent ransack用於搜索大型目錄和文件。可能會幫助你縮小範圍。搜索結果將允許您在結果窗格中讀取它找到匹配的確切行。
只要使用其中一個可用的PHP IDE(或者像Notepad ++這樣簡單的文本編輯器,如果你真的絕望)並在所有源文件中搜索變量的名稱(大多數PHP IDE也支持查找函數/變量被定義並允許你跳轉到相關的一段代碼)。雖然看起來很奇怪,你不知道代碼是怎樣稱呼模板的(不管它是Smarty還是別的什麼都不重要)。您應該能夠從代碼開始深入瞭解URI(使用任何支持調試的IDE),因爲這樣您就必須查看所定義的變量的位置。
Eclipse和PHPStorm具有相似的功能。 – DanMan 2013-08-19 11:42:47
蠻力的方式,因爲有時候smarty變量不是直接賦值的,但是它們的名字可以存儲在變量中,從多個字符串連接起來或者是一些函數的結果,這使得通過簡單搜索/ grep找不到文件。
首先,寫自己的功能打印可讀回溯,即:
function print_backtrace()
{
$backtrace = debug_backtrace(FALSE);
foreach($backtrace as $trace)
echo "{$trace['file']} :: {$trace['line']}<br>";
}
打開主Smarty的文件(Smarty.class.php
默認)和周圍線580有函數調用分配。修改它來觀看所希望的爲變量名:
function assign($tpl_var, $value = null)
{
if($tpl_var == 'FOOBAR') /* Searching for FOOBAR */
{
print_backtrace();
exit;
}
相同的修改可能需要第二功能 - assign_by_ref。現在運行腳本後,您應該有如下輸出:
D:\www\test_proj\libs\smarty\Smarty.class.php :: 584
D:\www\test_proj\classes.php :: 11
D:\www\test_proj\classes.php :: 6
D:\www\test_proj\functions.php :: 7
D:\www\test_proj\index.php :: 100
第二行指向首先分配變量的位置。
謝謝,這是一個好主意 - 我肯定會保存這些代碼以供將來調試,但是我最終只是使用grep,如下所示。 – Jon 2010-06-14 16:26:31
有一個有趣的進一步的選擇,醜陋像地獄,但有幫助,如果你真的失去了。
如果你想知道在哪裏THE_NAME
定義,寫出這樣的詩句對你肯定有地方首先運行:
error_reporting(E_ALL);
define('THE_NAME', 'Chuck Norris');
如果以後PHP運行你正在尋找的定義,它會寫這樣的通知:
Notice: Constant THE_NAME already defined
in /home/there/can-rip-a-page-out-of-facebook.com/SomeConfiguration.php on line 89
那麼你知道你正在尋找的定義是文件SomeConfiguration.php
上線89
要有這方面的工作,你必須考慮
- 如果有HTTP在途中你
- ,如果有進一步的命令設置PHP錯誤報告模式
所以有時候,爲了不模糊輸出,可以添加一些exit('here')
。也許你必須縮小一點,否則你必須早點設置error_reporting
,但你會發現它。
希望它有幫助,不管它多麼醜陋:-) :) :) – 2017-01-26 13:36:43
如果它......它值得提前upvote :) .. – 2017-10-20 07:18:03
- 1. 使用#ifdef或#if defined()找到變量的位置(未定義)
- 2. 從PHP到Smarty和Javascript的變量
- 3. 在{php}中爲smarty指定新變量
- 4. Prestashop:order-detail.tpl中的未定義Smarty變量
- 5. Smarty中的未定義變量
- 6. 如何訪問PHP smarty中父模板中定義的變量?
- 7. Smarty模板變量定義在哪裏?
- 8. 如何找到已設置php var或常量的位置?
- 9. PHP - Smarty變量在標題重定向後未設置
- 10. 在{php}標籤中使用smarty變量
- 11. 如何在PHP項目中找到變量定義
- 12. 將對話框定位在由javascript變量定義的位置
- 13. PHP Smarty插入函數和變量
- 14. 如何搜索定義的類或變量的位置
- 15. 如何找到在PHP腳本中未定義的變量是在PHP
- 16. 如何在Smarty中定義一個隨機值的變量
- 17. Smarty php變量輸出
- 18. 將字符串前置到Smarty變量
- 19. 如何在Anjuta中找到變量和函數定義?
- 20. PHP - 未定義的變量配置?
- 21. 找到定義Linux函數的位置
- 22. 骨幹Js - 設置地理位置變量[未定義變量]
- 23. javascript:|| (或)在變量定義?
- 24. 從smarty變量在模板中創建一個Smarty變量
- 25. 如何定義變量並在smarty中回顯它們?
- 26. 如何在smarty模板文件中定義變量?
- 27. 如何在prestashop中找到一個smarty變量1.6
- 28. 未定義的變量:_SESSION在php中?
- 29. 找不到已定義的變量
- 30. 未找到全局定義的變量
+1不喜歡Smarty。雖然我自己並沒有使用它們,但我認爲php-debugger和xdebug可以同時回溯外部變量或所有現有變量的變量/內容。無論如何,我爲你的Vista和調試情況點燃了一絲同情心。 – mario 2010-06-04 04:37:16