如果字符串是唯一的,则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追加到文件[关闭]的主要内容,如果未能解决你的问题,请参考以下文章