2017-08-18 58 views
1

所以。我有一個批處理文件。在那個批處理文件是PHP代碼。我所擁有的「唯一」問題是執行PHP時會打印「前導碼」。 「@rem待機......」使CLI在CLI上打開標記之前放棄內聯內容

示例批處理文件:

@rem Standby... <?php ob_start(); ?> 
@echo off 
echo Now in %comspec% 
echo I am on %OS% with %NUMBER_OF_PROCESSORS% CPUs  
echo Now handing off to PHP... 
php.exe -f "%~f0" -- %* 
goto :eof 
<?php ob_clean(); ob_end_flush(); 
print "Now in PHP ".PHP_VERSION.PHP_EOL; 
print "All done!"; 

,其輸出是這樣的:

Now in C:\WINDOWS\system32\cmd.exe 
I am on Windows_NT with 4 CPUs 
Now handing off to PHP... 
@rem Standby... Now in PHP 7.1.0 
All done! 

我知道這是因爲PHP解析器的性質它考慮了應該顯示的標籤內部內容之外的任何內容。這個腳本可以用在我不能依賴PHP配置的環境中。

如何讓PHP放棄內聯內容? (不編輯配置)上Win10

+0

對於它的價值,這個瘋狂的理由在這裏嘗試:[批量包裝的PHP腳本](HTTPS://nxsys.assembla。 com/spaces/onx/wiki/Batch_wrapping_PHP_scripts) – feamsr00

回答

0

PHP 7.1你只需要確保輸出緩衝是在配置級別開啓,那麼你就不需要調用ob_start()。這很簡單,通過命令行參數進行通用。例如:

@echo off 
echo Now in %comspec% 
echo I am on %OS% with %NUMBER_OF_PROCESSORS% CPUs  
echo Now handing off to PHP... 
php.exe -d output_buffering=On -f "%~f0" -- %* 
goto :eof 
<?php ob_clean(); ob_end_flush(); 
print "Now in PHP ".PHP_VERSION.PHP_EOL; 
print "All done!"; 

產量:

Now in C:\WINDOWS\system32\cmd.exe 
I am on Windows_NT with 4 CPUs 
Now handing off to PHP... 
Now in PHP 7.0.4 
All done! 
+0

嗯這個建議它感覺熟悉一些如何......我很好奇你的靈感? – feamsr00