如果字符串是唯一的,则Php追加到文件[关闭]

Posted

技术标签:

【中文标题】如果字符串是唯一的,则Php追加到文件[关闭]【英文标题】:Php append to file if the string is unique [closed] 【发布时间】:2013-02-22 13:14:18 【问题描述】:

是否可以检查正在添加到文件的字符串是否已经在文件中,然后才添加它?现在我正在使用

        $myFile = "myFile.txt";
    $fh = fopen($myFile, 'a') or die("can't open file");
    $stringData = $var . "\n";
    fwrite($fh, $stringData);
    fclose($fh);

但我得到了许多重复的 $var 值,并想摆脱它们。 谢谢

【问题讨论】:

你能否更清楚地说明 $var 更多信息将使这个问题更容易回答。文件是否总是换行符分隔?字符串是固定长度的吗?文件是小(适用于file_get_contents)还是大? 【参考方案1】:

可能的解决方案是:

1. Fetch the contents using fread or file_get_contents
2. Compare the contents with the current contents in file
3. add it if it is not there.

【讨论】:

【参考方案2】:
function find_value($input) 

  $handle = @fopen("list.txt", "r");
   if ($handle) 
    while (!feof($handle)) 
     $entry_array = explode(":",fgets($handle));
     if ($entry_array[0] == $input) 
      return $entry_array[1];
     
  
 fclose($handle);

return NULL;

你也可以这样做

$content = file_get_contents("titel.txt");
$newvalue = "word-searching";
//Then use strpos to find the text exist or not

【讨论】:

【参考方案3】:

使用这个

$file = file_get_contents("myFile.txt");
if(strpos($file, $var) === false) 
   echo "String not found!";
   $myFile = "myFile.txt";
   $fh = fopen($myFile, 'a') or die("can't open file");
   $stringData = $var . "\n";
   fwrite($fh, $stringData);
   fclose($fh);

【讨论】:

+1 几乎同时 :) 如果在位置 0 找到字符串会怎样 @Akam,可以用strpos() === FALSE解决 点赞应该是正确的答案,没有任何小错误:) 正是我需要的!非常感谢!【参考方案4】:

最好的方法是使用file_get_contents & 仅当 $var 不在您的文件中时才执行操作。

$myFile = "myFile.txt";
$file = file_get_contents($myFile);
if(strpos($file, $var) === FALSE) 

   $fh = fopen($myFile, 'a') or die("can't open file");
   $stringData = $var . "\n";
   fwrite($fh, $stringData);
   fclose($fh);

【讨论】:

if(!strpos("some text", "some")) echo "not found"; 看看这个!【参考方案5】:
$myFile = "myFile.txt";
$filecontent = file_get_contents($myFile);
if(strpos($filecontent, $var) === false)
$fh = fopen($myFile, 'a') or die("can't open file");
$stringData = $var . "\n";
fwrite($fh, $stringData);
fclose($fh);
else
 //string found

【讨论】:

【参考方案6】:

您可以将所有添加的字符串保存在一个数组中,并使用in_array 检查当前字符串是否已添加。

第二个选择是每次你想写read the file并在上面写一个strstr。

【讨论】:

【参考方案7】:

我相信 fgets 就是这里的答案。

$handle = fopen($path, 'r+');      // open the file for r/w
while (!feof($handle))             // while not end
    $value = trim(fgets($handle)); // get the trimmed line
    if ($value == $input)         // is it the value?
        return;                    // if so, bail out
                                  //
                                  // otherwise continue
fwrite($handle, $input);           // hasn't bailed, good to write
fclose($handle);                   // close the file

此答案仅基于您在代码中附加了换行符 ("\n") 的事实,这就是 fgets 将在这里工作的原因。这可能比使用file_get_contents() 将整个文件拉入内存更可取,因为文件的大小可能会让人望而却步。

或者,如果值不是换行符分隔,而是固定长度,您始终可以使用fgets()$length 参数来准确提取$n 字符(或使用fread() 来提取完全是$n 字节输出)

【讨论】:

以上是关于如果字符串是唯一的,则Php追加到文件[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C#怎样写TXT文件

如果其他条件产生无限循环,则继续语句[关闭]

文件操作2-Day3

Python基础3 文件操作字符编码与转码

python3-file文件操作

Python入门篇之文件操作和字符编码