csv-datei direkt vom server aus laden

loddarmattheus

Erfahrenes Mitglied
Hallo Leute,

ich komme mal wieder nicht weiter. Und zwar haben wir ein funktionierendes Script, welches eine CSV-Datei zunächst aus dem lokalen Ordner auf den Server lädt und dann entsprechend ausgelesen werden kann.

Nun haben wir das Problem, dass unsere hochzuladene Datei mittlerweile so gross ist (ca. 2,4 MB), dass öfter mal ein Timeout kommt. Meine Idee ist, die CSV-Datei zunächst per FTP hochzuladen, serverseitig in das Script einzulesen und weiterzuverarbeiten.

PHP:
<?php
	include('include/.............php');
	
	function save($data,$data_name){
		$pre = "csv/";
		$location = $pre.$data_name;
		$copy = copy($data,$location);
		if($copy) return $location;
		else return false;
	}
	if(!isset($action)) $action = 'show_form';
	
	if($action=='upload'){
	if(substr($csv_name,(strlen($csv_name)-3),3)=='csv'){
			$csv_url = save($csv,$csv_name);
			if($csv_url==false){
				echo 'die datei ('.$csv_name.') konnte nicht hochgeladen werden<br><br>';
				$action ='show_form';
			}
			else{
				echo 'die datei ('.$csv_name.') konnte hochgeladen werden<br><br>';
				$action = 'show_form2';
			}
		}
		else{
			echo 'die ausgewählte datei ist nicht vom typ "csv"<br><br>';
			$action=='show_form';
		}
	}
?>

<?php if($action=='show_form'){ ?>
<form action="update.php" method="post" enctype="multipart/form-data">
  <table cellspacing="0" cellpadding="2" style="border:1px solid black">
	<tr>
		
      <td valign="top">bitte geben Sie die export.csv an</td>
		<td valign="top"><input type="file" name="csv"  size="40"></td>
	</tr>
	<tr>
		<td valign="top" style="border-top:1px solid black">&nbsp;</td>
		<td valign="top" style="border-top:1px solid black"><input type="submit" value="upload"></td>
	</tr>
</table>
<input type="hidden" name="action" value="upload">
</form>
<?php } ?>

<?php if($action=='show_form2'){ ?>
<form action="update.php" method="post">
  <table cellspacing="0" cellpadding="2" style="border:1px solid black">
	<tr>
		<td valign="top" colspan="2">welche operationen wollen sie ausführen?</td>
	</tr>
	<tr>
		<td valign="top" style="border-top:1px solid black">alle eingetragenen artikel anhand der artikel-nummer updaten</td>
		<td valign="top" style="border-top:1px solid black"><input type="checkbox" name="update" value="1" checked></td>
	</tr>
	<tr>
		<td valign="top" style="border-top:1px solid black">alle nicht in der datenbank vorhandenen artikel einfügen</td>
		<td valign="top" style="border-top:1px solid black"><input type="checkbox" name="insert" value="1" checked></td>
	</tr>
	<tr>
		<td valign="top" style="border-top:1px solid black">alle nicht in der csv-datei vorhandenen artikel löschen</td>
		<td valign="top" style="border-top:1px solid black"><input type="checkbox" name="delete" value="1" checked></td>
	</tr>
	<tr>
		<td valign="top" style="border-top:1px solid black">menues, die keine submenues enthalten und submenues, die keine artikel enthalten löschen</td>
		<td valign="top" style="border-top:1px solid black"><input type="checkbox" name="del_menues" value="1" checked></td>
	</tr>
	<!--
	<tr>
		<td valign="top" style="border-top:1px solid black">nicht in der db vorhandene menues/sub-menues anlegen<br>(artikel mit nicht-vorhandenen menues/sub-menues werden sonst nicht aktualisiert/angelegt)</td>
		<td valign="top" style="border-top:1px solid black"><input type="checkbox" name="update_menues" value="1" checked></td>
	</tr>
	-->
	<tr>
		<td valign="top" style="border-top:1px solid black">fehlermeldungen anzeigen</td>
		<td valign="top" style="border-top:1px solid black"><input type="checkbox" name="show_fehler" value="1" checked></td>
	</tr>
	<tr>
		<td valign="top" style="border-top:1px solid black">erfolgsmeldungen anzeigen</td>
		<td valign="top" style="border-top:1px solid black"><input type="checkbox" name="show_erfolg" value="1" checked></td>
	</tr>
	<tr>
		<td valign="top" style="border-top:1px solid black">&nbsp;</td>
		<td valign="top" style="border-top:1px solid black"><input type="submit" value="go!"></td>
	</tr>
</table>
<input type="hidden" name="action" value="update">
<input type="hidden" name="csv_url" value="<?php echo $csv_url; ?>">
</form>
<?php } ?>

Das ist der obere Teil des Scriptes, welches die Datei einliest und dann weiterverarbeitet. Jetzt meine Frage - hat jemand eine Idee, wie ich das Script so umschreibe, dass ich eine immer gleichlautende CSV (z.B. export.csv) nicht erst hochlade, sondern gleich verarbeiten kann. Oder geht das vielleicht gar nicht

Danke für Eur Hilfe!
 
Die Datei via FTP auf den Server zu laden, um das Timeout zu umgehen, wird Dir nicht helfen, da das Script erst interpretiert wird, nachdem der HTTP-Upload beendet ist. Die Funktion set_time_limit() sollte Dich weiter bringen.

snuu
 
Zurück