2017-06-28 15 views
1

HTMLページの更新ボタンを使用してテーブルの値を取得していますが、これらの値を.csvファイルに入れています。 私はすでに作成したアップロードフォームを使用して、新しく生成されたファイル.csvを投稿したいと思います。 これは、更新ボタンによって呼び出されるコードの最初の部分である:無限ループを引き起こすcURLを使用したPHPアップロードファイル

<?php 

$PATH = "ABSOLUTE/PATH/TO/FOLDER"; 
if(isset($_POST)){ 
    if(isset($_POST['data'])){ 
     $Data = $_POST['data']['arrayHTML']; 
     $id = $_POST['data']['id']; 
     $filename = $PATH.$id."_".date('Ymd').".csv"; 
     $fileHandler = fopen($filename, "w"); 
     $splittedArray = array_chunk($Data, 4); 
     fputcsv($fileHandler, array("EAN", "REC", "RETAIL", "BRAND DISCOUNT"), ";"); 
     foreach ($splittedArray as $line) { 
      fputcsv($fileHandler, $line, ";"); 
     } 
     fclose($fileHandler); 
     echo "Done!"; 
    } 
} 

このHTMLアップロードフォームです:

<table border="1" align="center" width="800px;"> 
    <form METHOD="POST" ACTION="upload.php" enctype="multipart/form-data"> 
     <tr><td> 
     <h5><h3><b>Sync file:</b></h3><input type="file" name="fichero"> 
     <input type=text name="lateupdate" value='.date("Y-m-d").' id="datepicker"> 
     <input type=hidden name="carpeta" value="ABSOLUTE/PATH/TO/UPLOAD/FOLDER/"> 
     <input type=hidden name="page" value="index.php"/> 
     <input type=hidden name="id" value="'.$idprov.'"/> 
     <input type="submit" name="submit" value="UPLOAD"/> 


[OK]をので、csvファイルが生成されたら、私はこのようにcURLを使用しています:

$file_name_with_full_path = realpath($filename); 
$cfile = curl_file_create($file_name_with_full_path); 
$headers = array("Content-Type:multipart/form-data"); 
$target_url = "http://localhost:8000/upload.php"; 
$post = array('id'=>$id, 'file'=>$cfile, 'lateupdate'=>date('Y-m-d'), 'carpeta'=>'PATH/TO/FOLDER', 'page'=>'index.php'); 
//Iniating cURL 
$ch = curl_init(); 
//setting the options 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_URL,$target_url); 
curl_setopt($ch, CURLOPT_POST,1); 
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
$result=curl_exec ($ch); 
curl_close ($ch); 

私は取得しています私のlocalhostサーバー上のinfinteループ。

だから私はしてみました:

exec("curl -X POST -F '[email protected]$filename' -F 'page=index.php'\ 
     -F 'carpeta=/srv/http/TradeinnDev/killred/upload/'\ 
     -F 'lateupdate=".date('Y-m-d')."' \ 
     -F'id=$id' http://localhost:8000/upload.php" 
    ); 

そして、これは私のlocalhostのサーバーログの出力です:

php -S localhost:8000 -t /srv/http/ 
PHP 7.1.6 Development Server started at Wed Jun 28 10:00:35 2017 
Listening on http://localhost:8000 
Document root is /srv/http/ 
Press Ctrl-C to quit. 
[Wed Jun 28 10:00:38 2017] ::1:54168 [200]: /index.php?id=1 
[Wed Jun 28 10:00:38 2017] ::1:54174 [200]: /css/menu_style.css 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 878 0  0 100 878  0  8 0:01:49 0:01:41 0:00:08  0^C 

私はフィールドは常にresetingされる残り時間としてそれを殺さなければなりません。

は*****************あなたの助け

******************* EDITいただき、ありがとうございます******************

これは、アップロードproccessの奇妙な動作です:どうやら

% Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 777 0  0 100 777  0 387 0:00:02 0:00:02 --:--:-- 388 
100 777 0  0 100 777  0 258 0:00:03 0:00:03 --:--:-- 258 
100 777 0  0 100 777  0 193 0:00:04 0:00:04 --:--:-- 194 
100 777 0  0 100 777  0 110 0:00:07 0:00:07 --:--:--  0 
100 777 0  0 100 777  0  97 0:00:08 0:00:08 --:--:--  0 
100 777 0  0 100 777  0  64 0:00:12 0:00:12 --:--:--  0 
100 777 0  0 100 777  0  25 0:00:31 0:00:30 0:00:01  0 
100 777 0  0 100 777  0  22 0:00:35 0:00:34 0:00:01  0 
100 777 0  0 100 777  0  19 0:00:40 0:00:40 --:--:--  0 
100 777 0  0 100 777  0  18 0:00:43 0:00:41 0:00:02  0 
100 777 0  0 100 777  0  11 0:01:10 0:01:10 --:--:--  0 
+0

実際にループ構造が含まれていません示すコード。無限ループを引き起こす可能性があるのが分かりにくいです(本当に問題がある場合)。両方のケースでcURLリクエストがタイムアウトすると言っていますか? POSTMANやSOAPUIなどの別のツールを使用してそのURLにリクエストを行うとどうなりますか? – ADyson

+0

私はコマンドラインでexec呼び出しと同じ構文を使用してcURLを試してみましたが、うまくいきましたが、PHPでそれを使用していません。私はそれを無限ループと呼びました。なぜなら、cURLの実行が決して止まらないからです –

答えて

0

の引数にphp.iniファイルを渡しますPHPの組み込みWebサーバのコマンドラインは次のような解決策です:

php -S localhost:8000 -t /srv/http/TradeinnDev/killred -c /etc/php/php.ini 
PHPのmanページから

--php-ini path|file 
     -c path|file Look for php.ini file in the directory path or use the specified file 
関連する問題