2

投稿文字列を介してCSVからURLに一連のデータを送信する必要があります。これを達成するには、次のことを行っています。

<?php

$CSVleadfile = "leads.csv";

//lead file information lookup

$f = fopen($CSVleadfile, "r");

//begin while loop

while($row = fgetcsv($f)) {
        $contactId = $row[1];
        $createDate = $row[2];
        $callerAni = $row[3];
        $tfn = $row[4];
        $firstname = $row[5];
        $lastname = $row[6];
        $address1 = $row[7];
        $address2 = $row[8];
        $city = $row[9];
        $state = $row[10];
        $zip = $row[11];
        $homephone = $row[12];
        $email = $row[13];      

// load data for posting array

$post_data = array(
"Prs_First" => "$firstname",
"Prs_Middle" => "",
"Prs_Last" => "$lastname",
"Prs_Email" => "$email",
"Prs_Phone1" => "$homephone",
"Prs_Phone2" => "$callerAni",
"Prs_Address1" => "$address1",
"Prs_Address2" => "$address2",
"Prs_City" => "$city",
"Prs_State" => "$state",
"Prs_Zip" => "$zip",
"InitialContactDate" => "$createDate",
);

//traverse array and prepare data for posting (key1=value1)

unset($post_items);

foreach ($post_data as $key => $value) {
    $post_items[] = $key . '=' . $value;
}

//create the string to be posted using implode()

$post_string = implode ('&', $post_items);

//create cURL connection

$curl_connection = curl_init('https://www.whatever.com');

//echo to make sure string is formed correctly 

echo "Submitting: <br />";
echo "$post_string";
echo "<br />";


//set options

curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

//set data to be posted

curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);

//perform the request

$result = curl_exec($curl_connection);

$result = simplexml_load_string($result);
$result = json_encode($result);
$result = json_decode($result, true);

echo "<br />";
if (isset($result)){
echo "<pre>";
print_r($result);
echo "$result";
print_r($result[0]);
echo "$result[0]";
echo "</pre>";
} else {
echo "it's still broken.";
$result = "Still TFB";
}
echo "<br />";

unset($curl_connection);
unset($result);
unset($post_string);

}

//end while loop

fclose($f);

?>

今、私が抱えている問題は 2 つあります。最初に、$result または print_r をエコーし​​ようとしても、最後にそのエコーからの結果が表示されません。2番目の問題は、これには永遠にかかることです。送信に 30 秒かかるような話をしているのですが、何かの理由でタイムアウトになっているのではないでしょうか? 以前にこのような while ループ内で curl を使用したことがないので、何らかの追加のクリーンアップを行う必要があるかどうか、または curl からトラブルシューティングするための詳細情報をエコー バックする方法があるかどうかはわかりません。私は頭がおかしいと感じ始めています.Halp!

編集:

わかりましたので、提案されているように、ループの外にcurl関数を投げました:

<?php

$CSVleadfile = "testing.csv";

//lead file information lookup

$f = fopen($CSVleadfile, "r");

while ($row = fgetcsv($f)) {
$contactId = $row[1];
$createDate = $row[2];
$callerAni = $row[3];
$tfn = $row[4];
$firstname = $row[5];
$lastname = $row[6];
$address1 = $row[7];
$address2 = $row[8];
$city = $row[9];
$state = $row[10];
$zip = $row[11];
$homephone = $row[12];
$email = $row[13];

// load data for posting array
$post_data = array(
    "that" => "$junk",
);

//traverse array and prepare data for posting (key1=value1)
foreach ($post_data as $key => $value) {
    $post_items[] = $key . '=' . $value;
}

//create the string to be posted using implode()
$post_string = implode('&', $post_items);


//perform the request
executeCurl();

}

//outside loop curl function

function executeCurl() {

//create cURL connection
$curl_connection =      curl_init('https://www.whatever.com');

//set options

curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

//set data to be posted

curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);


$result = curl_exec($curl_connection);

$result = simplexml_load_string($result);

echo "<br />";
if (isset($result)) {
    var_dump($result);
    die;
} else {
    echo "it's still broken.";
    $result = "Still TFB";
}
echo "<br />";

file_put_contents("./Results.txt", $results, FILE_APPEND | LOCK_EX);
}

fclose($f);
?>

私はそこからjsonの奇妙さを取り除きました...正直に言って、なぜそこにそれを投げたのか思い出せません。フォーマットされている可能性はかなりありますが、どちらにしても私が期待している結果は次のようなものです:

<string xmlns="http://www.whatever.com">11940576</string>

そして、それは私がそのテキストファイルに記録したいものです:Dただし、動作に変更はありません:(私のvar_dumpはbool(false)になります

4

1 に答える 1

0

問題 1: 投稿データ配列を文字列に変換するのはなぜですか? Curl は喜んで の配列を受け入れます。配列をCURLOPT_POSTFIELDS使用すると、さらに Content-Type ヘッダーが multipart/form-data に設定されます。

問題 2: curl は、一度に複数のオプションを受け入れますcurl_setopt_array()

于 2012-10-03T17:08:55.347 に答える