fryhole329 Posted May 12, 2011 Share Posted May 12, 2011 I have written a small script for my own personal use that checks the servers of my favorite sites to see if they are operational. I'm having trouble getting it to work, I have most of it (I think) and I'm very new to PHP. The script also allows for a form to add any sites to the file, which I think I explode into an array correctly, at a later time. Here's my code, Please Help! <html> <head> <title>project.php</title> </head> <body> <?php $filename = "websites.txt"; $file = file_get_contents($filename); // reads entire file into a string $DomainNames = explode("\n", $file); // split the string at new line characters, returns an array $length = count($DomainNames) - 1; // count is the correct way to get the length of an array $i=0; while($i<=$length){ $fp = @fsockopen ($DomainNames[$i], 80, $errno, $errstr, 10); if (!$fp) echo "$DomainNames[$i] : <font color='red'>Failed!</font>"; else { echo "$DomainNames[$i] : <font color='green'>Online!</font>"; echo "<br>"; $i++; } } if (isset($_POST['submit'])) { $DomainNames[] = $_POST['url']; // append url to array $file = implode("\n", $DomainNames); // convert array to string, delimiting by new lines file_put_contents($filename, $file); // save contents to file } ?> <form action="project.php" method="post"> <fieldset> <label for="url">Url: </label> <input type="text" name="url" id="url" /> <input type="submit" name="submit" id="submit" value="Add URL" /> </fieldset> </form> </body> </html> Quote Link to comment https://forums.phpfreaks.com/topic/236240-favorite-sites-check-server-script/ Share on other sites More sharing options...
fryhole329 Posted May 12, 2011 Author Share Posted May 12, 2011 Okay, I found some errors myself (stupid stuff) now my code looks like this: <html> <head> <title>project.php</title> </head> <body> <?php $filename = "websites.txt"; $file = file_get_contents($filename); // reads entire file into a string $DomainNames = explode("\n", $file); // split the string at new line characters, returns an array $length = sizeof($DomainNames) - 1; // count is the correct way to get the length of an array $i=0; while($i<=$length){ $fp = @fsockopen ($DomainNames[$i], 80, $errno, $errstr, 10); if ($fp) echo "$DomainNames[$i] : <font color='red'>Failed!</font>"; else echo "$DomainNames[$i] : <font color='green'>Online!</font>"; echo "<br>"; $i++; } if (isset($_POST['submit'])) { $DomainNames[] = $_POST['url']; // append url to array $file = implode("\n", $DomainNames); // convert array to string, delimiting by new lines file_put_contents($filename, $file); // save contents to file } ?> <form action="project.php" method="post"> <fieldset> <label for="url">Url: </label> <input type="text" name="url" id="url" /> <input type="submit" name="submit" id="submit" value="Add URL" /> </fieldset> </form> </body> </html> The problem now is that when it writes to "websites.txt" it's adding it to the end of the last line instead of a new line. Anyone know how to fix this? Also, it's only returning the first two URLs as running, when the other's in the file are clearly running as well. Instead I'm getting the "Failed" option popping up. Any suggestions? [attachment deleted by admin] Quote Link to comment https://forums.phpfreaks.com/topic/236240-favorite-sites-check-server-script/#findComment-1214617 Share on other sites More sharing options...
QuickOldCar Posted May 12, 2011 Share Posted May 12, 2011 Here's something that can read a text file, check all the urls, and place them back into text file. You will see i connect different. I placed the alive/dead in text separated with a | For lines that are merging, see the comment for when data is getting inserted for extra \n <?php //read the text file $my_file = "check-alive-urls.txt"; //name your url text file here //see if exists if (file_exists($my_file)) { //contents of text file $data = file($my_file); //total lines $total = count($data); echo "<br />Total lines: $total<br />"; //loop the data by line foreach ($data as $line) { //skip empty lines if($line != ""){ //explode lines to get each value $explode_lines = explode("|",$line); $url = trim($explode_lines[0]); $status = trim($explode_lines[1]); //making sure any url has the http protocol if(substr($url,0,5) != "http:"){ $url = "http://$url"; } //see how long it takes to connect $time_start = microtime(1); //is best to use a stream context for more options $context = stream_context_create(array( 'http' => array( 'timeout' => 3 ) )); //get the content from url $the_contents = @file_get_contents($url, 0, $context); echo "<hr>"; //alive or dead condition if (empty($the_contents)) { $status = "dead"; } else { $status = "alive"; } //define colors to status and unchecked value if($status == "dead") { $color = "#FF0000"; } elseif($status == "alive") { $color = "#00FF00"; } else { $status = "unchecked"; $color = "#C0C0C0"; } //show results on page echo "<p style='color: $color;'>$status - <a href='$url'>$url</a></p>"; //create array of urls and status for text file $save_urls[] = "$url|$status"; //end of connect time $time_end = microtime(1); $time_elapsed = $time_end - $time_start; echo printf("<br />%f seconds - ", $time_elapsed); echo "</hr>"; } } //prep to save to text file $save_to_file = implode($save_urls,"\n"); //first option appends a file, second option overwrites file //uncomment and comment them for which you need /* //add new lines to end of text file $write = fopen($my_file, 'a+'); $message = $save_to_file; fputs($write, "$message\n"); // that extra \n adds and extra line for next data input fclose($write); */ //note the w, this will overwrite the entire contents of text file $write = fopen($my_file, 'w'); $message = $save_to_file; fputs($write, "$message\n"); // that extra \n adds and extra line for next data input fclose($write); } else { echo "No file to display"; } ?> Quote Link to comment https://forums.phpfreaks.com/topic/236240-favorite-sites-check-server-script/#findComment-1214694 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.