0

ページ内のファイルを参照するときに、.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

追加する必要があるものはありますか? 私を助けてください。

前もって感謝します。

4

2 に答える 2

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

//w+ : 読み取りおよび書き込み用に開きます。ファイルポインタをファイルの先頭に置き、ファイルの長さをゼロに切り詰めます。ファイルが存在しない場合は、作成してみてください。

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

注 - 'w' モードで fopen を使用しても、期待どおりにファイルの変更時刻 (filemtime) は更新されません。変更時刻を更新するファイルを書き込んで閉じた後、 touch() を発行することができます。これは、キャッシングの状況では重大になる可能性があります。

私は2つのアプローチを提案しています

アプローチ-1(ファイル処理、最も簡単な方法。論理演算やコンテンツからの文字列マッチングを行っていないことを考慮して、読み出されます)

Molecules.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>
于 2015-07-13T06:45:45.117 に答える