2017-06-28 4 views
1

Ich benutze eine Schaltfläche zum Aktualisieren auf einer HTML-Seite, um die Werte einer Tabelle zu erhalten, und dann bin ich nur diese Werte auf eine CSV-Datei. Ich möchte mein bereits vorhandenes Upload-Formular verwenden, um die neu generierte Datei .csv zu veröffentlichen. Dies ist der erste Teil des Codes durch den Update-Button genannt:PHP-Upload-Datei mit cURL verursacht Endlosschleife

<?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!"; 
    } 
} 

Dies ist das HTML-Upload-Formular:

<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 so, wenn die CSV-Datei erzeugt, Ich verwende cURL wie folgt:

$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); 

Und ich erhalte eine Infinet-Schleife auf meinem Localhost-Server.

Also habe ich versucht, mit:

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" 
    ); 

Und dies ist die Ausgabe von meinem localhost Server Log:

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 

Ich habe es zu töten, wie die Restzeit Feld immer Reseting.

Vielen Dank für Ihre Hilfe

******************* EDIT ***************** ******************

Dies ist das seltsame Verhalten des Upload 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

der Code keine Schleifenkonstrukte enthalten nicht wirklich gezeigt. Es ist schwer zu erkennen, was eine Endlosschleife verursachen könnte (wenn das tatsächlich das Problem ist). Wollen Sie sagen, dass die cURL-Anfrage in beiden Fällen abläuft? Was passiert, wenn Sie mit einem anderen Tool wie POSTMAN oder SOAPUI eine Anfrage an diese URL stellen? – ADyson

+0

Ich habe versucht mit CURL in der Befehlszeile mit der gleichen Syntax wie in der Exec Call und es funktioniert gut, aber die Verwendung in PHP nicht. Ich habe es Endlosschleife genannt, nur weil cURL Ausführung nie stoppt –

Antwort

0

Offenbar die Datei php.ini in Argument der Weitergabe Die php-integrierte Webserver-Befehlszeile ist die Lösung, wie folgt:

php -S localhost:8000 -t /srv/http/TradeinnDev/killred -c /etc/php/php.ini 

Aus der Manpage von PHP:

--php-ini path|file 
     -c path|file Look for php.ini file in the directory path or use the specified file 
Verwandte Themen