我一直在PHP中編碼很長一段時間(現在超過15年),而且我通常在Windows操作系統上這樣做,儘管大部分時間都是爲了執行在Linux服務器上。多年來,我遇到了一個煩惱,雖然不重要,但事實證明這有點令人煩惱,而且我已經到了想看看我能否以某種方式解決它的地步。這裏的問題是:是否有可能改變PHP的print_r函數的行爲
編碼時,我經常發現將數組的內容輸出到文本文件以便我可以查看它的內容是有用的。例如:
$fileArray = file('path/to/file');
$faString = print_r($fileArray, true);
$save = file_put_contents('fileArray.txt', $faString);
現在,當我用記事本打開該文件fileArray.txt,如果該文件是在寫字板打開該文件的內容都顯示在一個單一的線,而不是看到了漂亮迷人的結構。這是因爲,無論操作系統如何,PHP的print_r函數都使用\ n代替換行符,而不是\ r \ n。我當然可以通過簡單地添加一行代碼來進行必要的替換,從而解決問題。這一行,額外的代碼可以翻譯成我幾年來的數百個額外的步驟,而這些步驟不應該是必需的。我是一個懶惰的編碼器,這已經變得不可接受了。
目前,在我的開發機器上,我已經有了一種不同的解決方法(如下所示),但這有它自己的一套問題,所以我想找到一種方法來「強制「PHP在沒有所有額外代碼的情況下放入」正確的「換行符。我懷疑這可能是可能的,但我永遠不會知道我是否從未問過,所以...
無論如何,我目前的解決方法是這樣的。我有,在我的PHP包括路徑,文件(print_w.php),其中包括下面的代碼:
<?php
function print_w($in, $saveToString = false) {
$out = print_r($in, true);
$out = str_replace("\n", "\r\n", $out);
switch ($saveToString) {
case true: return $out;
default: echo $out;
}
}
?>
我還的auto_prepend_file設置在php.ini此相同的文件,因此它會自動包括它的每一個時間PHP在我的開發機器上執行腳本。然後在測試腳本時使用print_w函數代替print_r。這很好,只要當我將腳本上傳到遠程服務器時,我確保所有對函數print_w的引用都被刪除或註釋掉。如果我錯過了一個,我(當然)會得到一個致命的錯誤,這可能比原始問題更令人沮喪,但我在上傳之前仔細校對了我的代碼,因此它通常不是問題。
因此,在所有這些散亂之後,我的問題是,有沒有辦法改變print_r(或類似PHP函數)的行爲來使用Windows換行符,而不是Windows機器上的Linux換行符?
謝謝你的時間。
不!我只是試了一下,它和print_r有同樣的問題,但是謝謝你的建議。 –
我也做過:P沒有任何變化。這就是爲什麼我刪除了我最後的評論。我個人使用這樣的東西:http://stackoverflow.com/a/4282183/1437261(我使用Yii框架,它有內置)。 – Gogol
感謝您的建議。我想過只是深入研究PHP的代碼庫,並對那裏的行爲做出改變,但我不是那種編碼器,所以我可能會破壞一些東西。至於使用Yii(或任何其他類型的框架),這並不總是一種選擇,因爲我是一個自由開發人員,並不是所有客戶都願意使用「新技術」的想法,所以這不是一個普遍的選擇我。 –