簡體   English   中英

從Windows在PHP中創建UNIX安全測試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM