2015-07-13 53 views
0

當我瀏覽頁面中的文件時,我需要覆蓋.txt文件的內容。我已經爲它編寫了一個php腳本。下面覆蓋.txt文件的內容在php中

<input type="file" name="file" size="50" maxlength="25"> <br> 
<input type="submit" name="upload" value="Upload"> 

形式給出和PHP腳本是

$file1=$_FILES['file']; 
$out = file_get_contents($file1); 

$file2 = "molecule.txt"; 
$filehandle = fopen($file2, "a"); 
$file_contents = file($file1); 
$count = count(file($file1)); 
file_put_contents($file2, ""); 
$newlineno = 0; 
foreach ($file_contents as $line_num => $line) { 
    if (strpos($line, 'Standard orientation:') !== false) { 
     for ($lineno = $line_num + 5; $lineno <= $count; $lineno++) { 
      $line = $file_contents[$lineno]; 
      if (strpos($line, 'Rotational constants (GHZ):') != false) { 
       break; 
      } 

      $line = preg_replace('/\s+/', ' ', $line); 
      $split = explode(" ", $line); 
      $symbol = $mapping[$split[2]]; 
      $x = $y = $z = ''; 

      if ($split[4] >= 0) { 
       $x = ' ' . $split[4]; 
      } else { 
       $x = $split[4]; 
      } 
      if ($split[5] >= 0) { 
       $y = ' ' . $split[5]; 
      } else { 
       $y = $split[5]; 
      } 
      if ($split[6] >= 0) { 
       $z = ' ' . $split[6]; 
      } else { 
       $z = $split[6]; 
      } 

      $x = substr($x, 0, -3); 
      $y = substr($y, 0, -3); 
      $z = substr($z, 0, -3); 
      $newlineno++; 
      $newline = "ATOM\t" . $newlineno . "\t" . $x . "\t" . $y . "\t" . $z . "\t" . $symbol . "\n"; 

      fwrite($filehandle, $newline); 
     } 
    } 
} 


fclose($filehandle); 

$lines = file($file2); 
$last = sizeof($lines) - 1 ; 
unset($lines[$last]); 

$fp = fopen($file2, 'w'); 
fwrite($fp, implode('', $lines)); 
fclose($fp); 

echo "File UPLOADED SUCESSFULLLy"; 

?> 
<form method="POST" action="molecules.html"><br><br> 
<p><input type="submit" name="structure" value="View file"> 

molecule.html文件中包含的代碼顯示molecule.txt文件

的內容,但它沒有覆蓋的內容molecules.txt文件。

我還需要什麼補充嗎?請幫幫我。

在此先感謝。

+0

看起來像屬於數據庫的數據 – 2015-07-13 06:25:30

+0

如果您嘗試刪除寫入文件的內容,然後以寫入模式打開文件,而不是追加模式。 – sAcH

+0

你可以分享你的'molecule.html'文件代碼嗎?在分子.html文件中的代碼 –

回答

0

代替

$filehandle = fopen($file2, "a"); // this mode means append content 

使用

$filehandle = fopen($file2, "w"); //this mode means write file by over writing the previous content 
+0

它會擦除molecule.txt文件 – 121kk

+0

的內容,這是你問的權利? –

+0

我想覆蓋molecule.txt的內容 – 121kk

0
$filehandle = fopen($file2, "w+"); 

// w +:打開閱讀和寫作;將文件指針放在文件的開頭,並將文件截斷爲零。如果文件不存在,請嘗試創建它。

參考:http://php.net/manual/en/function.fopen.php

注 - 使用的fopen在「W」模式,就像你可能希望將不會更新文件的修改時間(filemtime)。您可能想要在寫入並關閉更新其修改時間的文件後發出touch()。這在緩存情況下可能變得至關重要。

我建議兩個接近

方法 - 1(文件處理,最簡單的方法,考慮到你沒有做任何邏輯運算或字符串匹配從內容,讀出)

分子html的 - 頁面包含表單上傳文件

<form method="POST" action="fileOverwrite.php" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file" size="50" /> 
    <br /> 
    <input type="submit" name="upload" value="Upload" /> 
</form> 

fileOverwrite.php - 文件進行重寫邏輯/腳本

<?php 
$file1  = $_FILES['file']['tmp_name']; 
$out  = file_get_contents($file1); 
$file2 = "molecule.txt"; 
$filehandle= fopen($file2, "w+") or die("Unable to open file!"); 
fwrite($filehandle, $out); 
fclose($filehandle); 
echo "File UPLOADED SUCESSFULLLY"; 
?> 
<form method="POST" action="molecules.html"> 
    <br/ ><br /> 
    <input type="submit" name="structure" value="View file" /> 
</form> 

方法 - 2(符合你的要求,你正在做一些字符串搜索)

molecules.html - 頁面包含表單來上傳文件

<form method="POST" action="test.php" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file" size="50" /> 
    <br /> 
    <input type="submit" name="upload" value="Upload" /> 
</form> 

fileOverwrite.php - 文件用於覆蓋邏輯/腳本

<?php 
// Capture the file's temp path and name 
$file1 = $_FILES['file']['tmp_name']; 

// Reads entire file into a string 
$out = file_get_contents($file1); 

// Target file 
$file2 = "molecule.txt"; 

// Open file for reading and writing 
$filehandle = fopen($file2, "w+"); 

//Reads entire file into an array 
$file_contents = file($file1); 

$count = count(file($file1)); 

// Write a string to a file 
file_put_contents($file2, $file_contents); 

$newlineno = 0; 
foreach ($file_contents as $line_num => $line) { 
    if (strpos($line, 'Standard orientation:') !== false) { 
     for ($lineno = $line_num + 5; $lineno <= $count; $lineno++) { 
      $line = $file_contents[$lineno]; 
      if (strpos($line, 'Rotational constants (GHZ):') != false) { 
       break; 
      } 

      $line = preg_replace('/\s+/', ' ', $line); 
      $split = explode(" ", $line); 
      $symbol = $mapping[$split[2]]; 
      $x = $y = $z = ''; 

      if ($split[4] >= 0) { 
       $x = ' ' . $split[4]; 
      } else { 
       $x = $split[4]; 
      } 

      if ($split[5] >= 0) { 
       $y = ' ' . $split[5]; 
      } else { 
       $y = $split[5]; 
      } 

      if ($split[6] >= 0) { 
       $z = ' ' . $split[6]; 
      } else { 
       $z = $split[6]; 
      } 

      $x = substr($x, 0, -3); 
      $y = substr($y, 0, -3); 
      $z = substr($z, 0, -3); 

      $newlineno++; 
      $newline = "ATOM\t" . $newlineno . "\t" . $x . "\t" . $y . "\t" . $z . "\t" . $symbol . "\n"; 

      // Binary-safe file write 
      fwrite($filehandle, $newline); 
     } 
    } 
} 

// Close open file pointer 
fclose($filehandle); 

$lines = file($file2); 
$last = sizeof($lines) - 1; 
unset($lines[$last]); 

$fp = fopen($file2, 'w+'); 
fwrite($fp, implode('', $lines)); 
fclose($fp); 

echo "File UPLOADED SUCESSFULLLY"; 
?> 

<form method="POST" action="molecules.html"> 
    <br/ ><br /> 
    <input type="submit" name="structure" value="View file" /> 
</form> 
+0

感謝您的迴應我已經嘗試過.....但它不會更新分子內容.txt文件 – 121kk

+0

您是否希望a)在現有內容末尾添加新內容,同時保留舊內容或b)用新內容替換舊內容刪除舊內容 –

+0

我需要選項b – 121kk