2010-10-18 23 views
0

我已經搜索了論壇,但是最接近控制流的問題沒有幫助,或者我不明白,所以我想問一個不同的問題。將上傳的文件傳遞給腳本的另一部分以進行後續處理

我有一個HTML格式的上傳多個文件到目錄。處理上載的上傳管理器駐留在具有不同代碼的同一個腳本中,我需要將這些文件名傳遞給進行處理。

問題是文件被上傳,但他們沒有得到處理其他代碼。我不確定在鄰接代碼中傳遞$_FILES['uploadedFile']['tmp_name'])的正確方式,因此可以使用剩餘的代碼處理這些文件。請在腳本下方找到。

更多特異性的解釋:

這個腳本專門做兩件事情。第一部分處理文件上傳,第二部分從斜體評論開始,從衆多上傳的文件中提取數據。這部分有一個變量$_infile,它是假設獲取上傳文件的數組。我需要將文件傳遞到這個數組中。到目前爲止,我掙扎着,做到了這一點:$inFiles = ($_FILES['uploadedFile']['tmp_name']);這是行不通的。您也可以在下面的完整代碼示例中看到它。沒有錯誤,但文件不通過,上傳後不處理。

<?php 
// This part uploads text files 
if (isset($_POST['uploadfiles'])) { 
    if (isset($_POST['uploadfiles'])) { 
    $number_of_uploaded_files = 0; 
    $number_of_moved_files = 0; 
    $uploaded_files = array(); 
    $upload_directory = dirname(__file__) . '/Uploads/'; 

    for ($i = 0; $i < count($_FILES['uploadedFile']['name']); $i++) { 
     //$number_of_file_fields++; 
     if ($_FILES['uploadedFile']['name'][$i] != '') { //check if file field empty or not 
      $number_of_uploaded_files++; 
       $uploaded_files[] = $_FILES['uploadedFile']['name'][$i]; 
       //if (is_uploaded_file($_FILES['uploadedFile']['name'])){ 
       if (move_uploaded_file($_FILES['uploadedFile']['tmp_name'][$i], $upload_directory . $_FILES['uploadedFile']['name'][$i])) { 
       $number_of_moved_files++; 
       } 

     } 

    } 

} 

    echo "Files successfully uploaded . <br/>" ; 
    echo "Number of files submitted $number_of_uploaded_files . <br/>"; 
    echo "Number of successfully moved files $number_of_moved_files . <br/>"; 
    echo "File Names are <br/>" . implode(',', $uploaded_files); 


*/* This is the start of a script to accept the uploaded into another array of it own for* processing.*/ 
    $searchCriteria = array('$GPRMC'); 

//creating a reference for multiple text files in an array  
**$inFiles = ($_FILES['uploadedFile']['tmp_name']);**  
$outFile = fopen("outputRMC.txt", "w"); 
$outFile2 = fopen("outputGGA.txt", "w"); 
//processing individual files in the array called $inFiles via foreach loop 
if (is_array($inFiles)) { 
foreach($inFiles as $inFileName) { 
    $numLines = 1; 
    //opening the input file 
    $inFiles = fopen($inFileName,"r"); 

    //This line below initially was used to obtain the the output of each textfile processed. 
    //dirname($inFileName).basename($inFileName,'.txt').'_out.txt',"w"); 
    //reading the inFile line by line and outputting the line if searchCriteria is met 
    while(!feof($inFiles)) { 
     $line = fgets($inFiles); 
     $lineTokens = explode(',',$line); 
     if(in_array($lineTokens[0],$searchCriteria)) { 
      if (fwrite($outFile,$line)===FALSE){ 
       echo "Problem w*riting to file\n"; 
      } 
      $numLines++; 
     } 
// Defining search criteria for $GPGGA 
    $lineTokens = explode(',',$line); 
     $searchCriteria2 = array('$GPGGA'); 
     if(in_array($lineTokens[0],$searchCriteria2)) { 
      if (fwrite($outFile2,$line)===FALSE){ 
       echo "Problem writing to file\n"; 
      } 
     } 
    } 
} 

    echo "<p>For the file ".$inFileName." read ".$numLines; 
    //close the in files 
    fclose($_FILES['uploadedFile']['tmp_name']); 
    fflush($outFile); 
    fflush($outFile2); 

} 

fclose($outFile); 
fclose($outFile2); 
} 

?> 
+0

你能更詳細地指定問題是什麼嗎? print_r($ _ FILES);'產生了什麼? – 2010-10-18 19:18:45

+0

該行僅用於測試數組的內容。問題是,在文件上傳後,我想通過如下分配:$ inFiles =($ _FILES ['uploadedFile'] ['tmp_name']),所以我可以使用變量$ inFiles在其他部分腳本 – ibiangalex 2010-10-18 19:42:30

+0

我手動輸入文件名數組像這樣; $ inFiles = array('15082010_station_test_balkony.txt');現在不是這樣做,我想上傳文件,然後將它們傳遞到infrar的arrar中,這是通過一種方式自動完成的。 – ibiangalex 2010-10-18 19:52:36

回答

0

試試這個上傳類,而不是看它是否有助於:

要使用它,只是Upload::files('/to/this/directory/'); 它返回的文件名的數組,在那裏上傳。 (如果該文件已經存在於上傳目錄中,則可以重命名該文件)

class Upload { 
    public static function file($file, $directory) { 
     if (!is_dir($directory)) { 
      if ([email protected]($directory)) { 
       throw new Exception('Upload directory does not exists and could not be created'); 
      } 
      if ([email protected]($directory, 0777)) { 
       throw new Exception('Could not modify upload directory permissions'); 
      } 
     } 

     if ($file['error'] != 0) { 
      throw new Exception('Error uploading file: '.$file['error']); 
     } 

     $file_name = $directory.$file['name']; 

     $i = 2; 
     while (file_exists($file_name)) { 
      $parts = explode('.', $file['name']); 
      $parts[0] .= '('.$i.')'; 
      $new_file_name = $directory.implode('.', $parts); 
      if (!file_exists($new_file_name)) { 
       $file_name = $new_file_name; 
      } 
      $i++; 
     } 

     if ([email protected]_uploaded_file($file['tmp_name'], $file_name)) { 
      throw new Exception('Could not move uploaded file ('.$file['tmp_name'].') to: '.$file_name); 
     } 

     if ([email protected]($file_name, 0777)) { 
      throw new Exception('Could not modify uploaded file ('.$file_name.') permissions'); 
     } 

     return $file_name; 
    } 

    public static function files($directory) { 
     if (sizeof($_FILES) > 0) { 
      $uploads = array(); 
      foreach ($_FILES as $file) { 
       if (!is_uploaded_file($file['tmp_name'])) { 
        continue; 
       } 

       $file_name = static::file($file, $directory); 

       array_push($uploads, $file_name); 
      } 
      return $uploads; 
     } 
     return null; 
    } 
} 
+0

感謝您的回覆,但我是一個新手抱歉,但我可以解釋我更多關於如何使用這個功能相關的問題,這是很複雜的。我不明白這一點。當文件上傳時,我需要將它們傳遞給像這樣的變量; $ inFiles =($ _FILES ['uploadedFile'] ['tmp_name'])。它是否正確? – ibiangalex 2010-10-18 19:46:41

+0

要讀取文件,你需要'$ in_files = Upload :: files('/ to/this/directory /');如果($ in_files)foreach($ in_files as $ file){/ *請閱讀$文件* /}' – Petah 2010-10-18 20:01:48

+0

請問一件事。我有自己的頁面的類,我不明白的目錄創建。是創建目錄的類嗎?或者我必須添加一行:$ upload_directory = dirname(__ file__)。 '/上傳/';請澄清。謝謝 – ibiangalex 2010-10-18 20:51:41

相關問題