String Function

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

hansford
Forum Commoner
Posts: 91
Joined: Mon May 26, 2008 12:38 am

Re: String Function

Post by hansford »

it won't find anymore because you have a break; statement in the loop which terminates the loop.
hansford
Forum Commoner
Posts: 91
Joined: Mon May 26, 2008 12:38 am

Re: String Function

Post by hansford »

I'm going to assume that files2.txt is the materfile that contains all of the possible strings you're looking for in a file.
that being the case then files2.txt should be in the first while loop and logs2 in the second. You have other error code stuff that I commented out. run this code and you get your expected results. We'll work on the error code next after you tell us what the error is for

Code: Select all

 
<?
$text=fopen("logs2.txt", r);
 
while (!feof($text)) {
$tText=fgets($text);
$logs=fopen("files2.txt", r);
while (!feof($logs)) {
$tLogs=fgets($logs);
$error=1;
if(strstr($tLogs, $tText) && $error != 0) {
$error=0;
echo("Found $tText<br>");
//fclose($logs);
break;
} else {
//$error=1;
}
}
if($error == 1) {
//fclose($logs);
}
}
fclose($text);
?>
 
Last edited by Weirdan on Fri Jun 13, 2008 1:51 pm, edited 1 time in total.
Reason: php tags
hansford
Forum Commoner
Posts: 91
Joined: Mon May 26, 2008 12:38 am

Re: String Function

Post by hansford »

forget my posts - sorry, I see what the problem is doh! here is the corrected code-without the $error var. I made comments where the changes occurred. Oh, and I tested this one :)

Code: Select all

 
<?
$text=fopen("files2.txt", r);
 
while (!feof($text)) {
 
$tText=fgets($text);
$logs=fopen("logs2.txt", r);
while (!feof($logs)) {
 
$tLogs=fgets($logs);
$error=1;
if(strstr($tText,$tLogs)) {  //i haystack before needle
 
echo("Found $tText<br>");
break;
 
}
}
fclose($logs); //close $logs at the end of each loop in the first while
}
fclose($text);
?>
 
hansford
Forum Commoner
Posts: 91
Joined: Mon May 26, 2008 12:38 am

Re: String Function

Post by hansford »

of course if all the files in files2.txt are going to have the same format like a.txt which is a single lower-case character of a-z followed by a dot(.) followed by a lower-case string txt
then here is the way to go. You can make a pattern for just about anything and do it this way.

Code: Select all

 
<?
$file1 = file_get_contents("logs2.txt");
$pattern = "#[/s/s]*[a-d]\.txt#";
preg_match_all($pattern, $file1, $matches,PREG_PATTERN_ORDER);
 
foreach($matches[0] as $key){
 
echo "found: " . $key . "<br>";
}
?>
 
results

Code: Select all

 
found: b.txt
found: c.txt
 
Last edited by Weirdan on Fri Jun 13, 2008 1:52 pm, edited 2 times in total.
Reason: php tags
Zanne
Forum Newbie
Posts: 15
Joined: Mon Feb 04, 2008 3:38 pm

Re: String Function

Post by Zanne »

I tested what you had, and it still isn't working. I've tried it on my localhost server, and my server http://the-exodus.net. I can't use preg_match, because I'm trying to find files that aren't being used on my web server(other than the-exodus.net). My site currently has over 10,000 files on it, so to narrow down the list, I'm comparing my web logs(logs2.txt) to the directory structure of every single file on the server(files2.txt). Comparing these two files won't give me a 100% list of what to take out, but it should narrow down the list by almost 75%-90%.

Updated the file.php on my server.

File:
http://www.the-exodus.net/help/file.php

File source:
http://www.the-exodus.net/help/viewfile.php

logs2.txt
http://www.the-exodus.net/help/logs2.txt

files2.txt
http://www.the-exodus.net/help/files2.txt


Also, if I use if(strstr($tLogs, tText)), it returns just finding /index.php
hansford
Forum Commoner
Posts: 91
Joined: Mon May 26, 2008 12:38 am

Re: String Function

Post by hansford »

yeah if(strstr($tLogs,$tText)) won't work b/c you're putting the needle before the haystack. it has to be if(strstr($tText,$tLogs))

I ran the last code I posted against the 2 files you presented when you started this post. And it was 100% accurate. Now if your files don't look like a.txt b.txt ...etc then it won't work.
Zanne
Forum Newbie
Posts: 15
Joined: Mon Feb 04, 2008 3:38 pm

Re: String Function

Post by Zanne »

hansford wrote:yeah if(strstr($tLogs,$tText)) won't work b/c you're putting the needle before the haystack. it has to be if(strstr($tText,$tLogs))

I ran the last code I posted against the 2 files you presented when you started this post. And it was 100% accurate. Now if your files don't look like a.txt b.txt ...etc then it won't work.
Ah, the files2.txt and logs2.txt files are different. I just did a.txt/b.txt as an example, but what's in files2.txt and logs2.txt in the links above is what I need this for.
User avatar
RobertGonzalez
Site Administrator
Posts: 14293
Joined: Tue Sep 09, 2003 6:04 pm
Location: Fremont, CA, USA

Re: String Function

Post by RobertGonzalez »

If there is another post of code without using code tags I am locking this thread. The code tag is there for a reason. It is hard to read your code when it is in plain text.

It is not that hard. Highlight the code, click the little "Code" button above. Done. To get extra fancy, you can even add a little =php inside the opening code tag to highlight it as PHP.
hansford
Forum Commoner
Posts: 91
Joined: Mon May 26, 2008 12:38 am

Re: String Function

Post by hansford »

I put out a post on another forum regarding this, but so far they are just as baffled. I'll let you know if anyone finds an answer to this.
Here is the files and the code I have now.

http://www.modernterrain.com/files2.txt
http://www.modernterrain.com/logs2.txt

Code: Select all

<?
$logs=fopen("logs2.txt", r);
 
while (!feof($logs)) {
 
$tLogs=(string)fgets($logs);
 
$text=fopen("files2.txt", r);
 
while (!feof($text)) {
 
$tText=(string)fgets($text);
 
if(strpos($tLogs,$tText) !== FALSE){
 
echo("Found {$tText}<br>");
break;
}
}
fclose($text);
}
fclose($logs);
?>
User avatar
RobertGonzalez
Site Administrator
Posts: 14293
Joined: Tue Sep 09, 2003 6:04 pm
Location: Fremont, CA, USA

Re: String Function

Post by RobertGonzalez »

What are you trying to do again?
Zanne
Forum Newbie
Posts: 15
Joined: Mon Feb 04, 2008 3:38 pm

Re: String Function

Post by Zanne »

Everah wrote:What are you trying to do again?
Overall, I'm trying to create a file that compares two files and returns what files weren't found. I have one file that has a list of every single file(files2.txt) and I have web logs(logs2.txt). Basically I want to create a file that searches every line of files2.txt and compare it to logs2.txt. If a file in files2.txt isn't found in logs2.txt, log it and echo it on a screen.
User avatar
RobertGonzalez
Site Administrator
Posts: 14293
Joined: Tue Sep 09, 2003 6:04 pm
Location: Fremont, CA, USA

Re: String Function

Post by RobertGonzalez »

file() will read a file into an array line by line. You could use that to compare values of the lines of the file line by line.

If the files are going to contain the exact same line information (I mean the lines would look identical in the way the line is written), you could potentially run a shell command that uses the `diff` command and capture the output.
hansford
Forum Commoner
Posts: 91
Joined: Mon May 26, 2008 12:38 am

Re: String Function

Post by hansford »

Respectfully, when you test the code against the files we have, you will see what is going on. This is not some trivial complaint from people who started programming last year. I'm sure you can come to some conclusion as to what is wrong, whether it be a bug or other.
User avatar
Benjamin
Site Administrator
Posts: 6935
Joined: Sun May 19, 2002 10:24 pm

Re: String Function

Post by Benjamin »

Code: Select all

 
<?php
$skeleton_array = explode("\n", file_get_contents('skeleton_file.txt'));
 
$test_array = explode("\n", file_get_contents('test.txt'));
 
while ($line = array_shift($test_array))
{
    if (!in_array($line, $skeleton_array))
    {
        echo "$line is not in skeleton_file.txt\n<br />";
    }
}
 
hansford
Forum Commoner
Posts: 91
Joined: Mon May 26, 2008 12:38 am

Re: String Function

Post by hansford »

Well DevNet Master beat me to it, but I was going to post this. BTW I still would like to know why it doesn't work the other way.

Code: Select all

 
<?php
 
$haystack = file_get_contents("logs2.txt");
$hayarray = explode("\n", $haystack);
$needle = file_get_contents("files2.txt");
$needarray = explode("\n", $needle);
 
foreach($hayarray as $arg){
 
foreach($needarray as $val){
 
if(strpos($arg, $val) !== false) {
 
    echo "found: " . $val . "<br>";
}
}
}
?>
 
Post Reply