0

我想检查一个文本文件的内容是否与另一个相同,如果不是,将一个写入另一个。我的代码如下:

<?php $file = "http://example.com/Song.txt";
$f = fopen($file, "r+");
$line = fgets($f, 1000);
$file1 = "http://example.com/Song1.txt";
$f1 = fopen($file1, "r+");
$line1 = fgets($f1, 1000);
if (!($line == $line1)) {
    fwrite($f1,$line);
    $line1 = $line;
    };
print htmlentities($line1);
?>

正在打印该行,但内容未写入文件中。

关于可能是什么问题的任何建议?

顺便说一句:我使用 000webhost。我认为这是网络托管服务,但我已经检查过,应该没有问题。我还在这里检查了fwrite函数:http: //php.net/manual/es/function.fwrite.php。请,任何帮助将非常感激。

4

2 回答 2

1

处理文件时,您将希望使用 PATHS 而不是 URLS。
所以
$file = "http://example.com/Song.txt"; 变成
$file = "/the/path/to/Song.txt";

下一个:

$file1 = '/absolute/path/to/my/first/file.txt';
$file2 = '/absolute/path/to/my/second/file.txt';
$fileContents1 = file_get_contents($file1);
$fileContents2 = file_get_contents($file2);
if (md5($fileContents1) != md5($fileContents2)) {
    // put the contents of file1 in the file2
    file_put_contents($file2, $fileContents1);
}

此外,您应该检查您的文件是否可以被网络服务器写入,即0666权限。

于 2013-05-08T23:35:52.747 回答
1

您所做的仅适用于最大 1000 字节的文件。另外 - 您正在使用“http://”打开要写入的第二个文件,这意味着 fopen 内部将使用 HTTP URL 包装器。这些默认情况下是只读的。您应该使用其本地路径打开第二个文件。或者,为了使这更简单,您可以这样做:

$file1 = file_get_contents("/path/to/file1");
$path2 = "/path/to/file2";
$file2 = file_get_contents($path2);
if ($file1 !== $file2)
    file_put_contents($path2, $file1);
于 2013-05-08T23:36:12.053 回答