将代码从bash转换为php

时间:2012-03-10 14:53:33

标签: bash

我目前在bash中有一个现有的代码,它从配置文件中抓取一个关键字:

    [USER1]
    usrcid = 5654654654
    usrsid = XDFDFSAS22
    usrmid = COMPANYNAME1
    usrsrt = secret1
    urlenc = http://www.url1.com

    [USER2]
    usrcid = 5654654667
    usrsid = XDFDFSAS45
    usrmid = COMPANYNAME2
    usrsrt = secret2
    urlenc = http://www.url2.com

我将它存储为变量并用它来处理脚本的其余部分。我想要实现的是将行为从bash转换为php并进行卷曲:

    F1=/etc/config/file.txt
    CID=`grep "\[USER1\]" -A 5 $F1 | grep usrcid | awk {'print$3'}`
    SID=`grep "\[USER1\]" -A 5 $F1 | grep usrsid | awk {'print$3'}`
    MID=`grep "\[USER1\]" -A 5 $F1 | grep usrmid | awk {'print$3'}`
    SRT=`grep "\[USER1\]" -A 5 $F1 | grep usrsrt | awk {'print$3'}`
    URI=`grep "\[USER1\]" -A 5 $F1 | grep urlenc | awk {'print$3'}`
    echo $CID $SID $MID $SRT $URI

我真的不是一个php大师所以请原谅下面的代码,但从一般的角度来看,下面的代码是我对我想要实现的目标的理解:

    <?php
    include "/etc/config/file.txt"

    // *** the equivalent code grep? ***

    function get_data($url)
    {
     $ch = curl_init();
         $timeout = 5;
         curl_setopt($ch,CURLOPT_URL,$url);
         curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
         curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
         $data = curl_exec($ch);
         curl_close($ch);
         return $data;
    }

    // *** i'm not sure if this one is correct? ***

$returned_content = get_data('$URI/cid=$CID&sid=$SID&mid=$MID&srt=$SRT')
    echo $returned_content;
    ?>

这是我第一次在stackoverflow中询问,所以我想提前感谢你!

1 个答案:

答案 0 :(得分:1)

包含不会做你认为它正在做的事情。它不会获取您在文本文件中设置的变量。如果它是您包含的文件中的PHP代码,它会评估它,但在这种情况下,它只是文本。请参阅Manual

您需要使用parse_ini_file()函数。它将配置文件作为第一个参数,将布尔标志作为第二个参数。第二个参数用于让函数知道你应该使用配置文件中的部分。

示例:

file.txt的:

[USER1]
usrcid = 5654654654
usrsid = XDFDFSAS22
usrmid = COMPANYNAME1
usrsrt = secret1
urlenc = http://www.url1.com

[USER2]
usrcid = 5654654667
usrsid = XDFDFSAS45
usrmid = COMPANYNAME2
usrsrt = secret2
urlenc = http://www.url2.com

test.php的:

<?php

$config = parse_ini_file("file.txt", true);

print_r($config);

?>

(请参阅parse_ini_file()手册)

这会将配置文件加载到$config变量,它将包含以下内容:

Array
(
    [USER1] => Array
        (
            [usrcid] => 5654654654
            [usrsid] => XDFDFSAS22
            [usrmid] => COMPANYNAME1
            [usrsrt] => secret1
            [urlenc] => http://www.url1.com
        )

    [USER2] => Array
        (
            [usrcid] => 5654654667
            [usrsid] => XDFDFSAS45
            [usrmid] => COMPANYNAME2
            [usrsrt] => secret2
            [urlenc] => http://www.url2.com
        )

)

现在,要构建一个可以使用的URL:

$url = "{$config['USER1']['urlenc']}/cid={$config['USER1']['usrcid']}&sid={$config['USER1']['usrsid']}&mid={$config['USER1']['usrmid']}&srt={$config['USER1']['usrsrt']}";

或者构造一个动态的方法来迭代$ config变量中给出的数组,以考虑几个部分。您可以通过您获得的cURL函数运行此URL。