[英]Creating UNIX safe test in PHP from windows
我正在嘗試使用PHP在Windows上創建Shell腳本。 它是一些較大功能的一部分。
這是我的腳本:
$contents_str = ''.
'#!/bin/bash
yes | apt-get update
yes | apt-get upgrade
useradd sudoer -g sudo -s /bin/bash -m
echo "sudoer:sudoerpass" | chpasswd';
但是,當此文件在服務器上時,出現“錯誤的解釋器-沒有此類文件或目錄”錯誤。 我知道這是因為文件中有一些隱藏的Windows字符。
是否可以使用功能或腳本刪除PHP中的隱藏Windows字符? 另外,是否可以在服務器上使用一個bash命令來執行此操作?
我已經在文件上使用過dos2unix,執行此操作后便可以使用,但我寧願不使用dos2unix,因為這是我必須在服務器上安裝的東西,我需要可以在Ubuntu盒子外直接使用的東西。
謝謝。
編輯 :
我只是找到了一種使用preg_replace清理字符串的方法。
這是代碼(當然,是我上面已經發布的代碼的繼續):
$contents_nixsafe_str = preg_replace('/(\r\n|\r|\n)/s', "\n" , $contents_str);
這對我來說沒有任何問題。
感謝您的所有回復
我假設您使用的編輯器以Windows的CRLF格式輸出行尾(EOL)字符。 根據編輯器的不同,您也許可以告訴它使用UNIX行尾(LF)。
或者,您可以將各行連接在一起並手動附加EOL字符:
$contents_str = ''
.'#!/bin/bash'."\n"
.'yes | apt-get update'."\n"
.'yes | apt-get upgrade'."\n"
.'useradd sudoer -g sudo -s /bin/bash -m'."\n"
.'echo "sudoer:sudoerpass" | chpasswd';
很難看,但是可以完成工作。
嘗試用系統換行常量替換換行
$contents_str = str_replace("\r\n", PHP_EOL, $contents_str);
另外,您可能想看一下用於創建多行字符串的heredoc語法,在此語法中,您以特殊標識符(在此示例中為STR
)開始和結束字符串:
$contents_str = <<<STR
#!/bin/bash
yes | apt-get update
yes | apt-get upgrade
useradd sudoer -g sudo -s /bin/bash -m
echo "sudoer:sudoerpass" | chpasswd
STR;
$contents_arr = array
(
'#!/bin/bash',
'yes | apt-get update',
'yes | apt-get upgrade',
'useradd sudoer -g sudo -s /bin/bash -m',
'echo "sudoer:sudoerpass" | chpasswd'
);
$contents_str = implode("\n", $contents_arr);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.