Hace ya varias semanas que no escribo nada acerca de programación en ningún lenguaje. Hoy redactaré unos cuantos ejemplos sencillos sobre cómo leer y escribir archivos con el afamado PHP. El ejemplo trata los casos más sencillos para lectura y escritura.

En contexto: me ví enredado en escribir un archivo (log) personalizado para registrar eventos en un programa, a su vez, no tenía ningún programa para leerlo, así que tenía implícita la tarea de leer el archivo. Sé que me dirán que la función log() de PHP hace esto, pero ¿no es propio de cualquier geek/programador descubrir el hilo negro?.

Aquí les dejo las funciones, que son en verdad muy sencillas.

<?php
//cleaning user input
function cleanInput($input) {
  $search = array(
    '@<script[^>]*?>.*?@si',//kill JS
    '@<[\/\!]*?[^<>]*?>@si',//kill HTML
    '@<style[^>]*?>.*?@siU',//kill css
    '@<![\s\S]*?--[ \t\n\r]*>@'//kill multiline
  );
  $output = preg_replace($search, '', $input);
  return $output;
}

//clear log file to inspect new records
function clear_log(){
  $filename = "log_.php";
  $fp = fopen($filename,"w");
  fclose($fp);
}

//log a message into a $filename
function log_message($data) {
  //using vars
  $date = date("m.d.y H:i:s");
  $command = cleanInput($_POST["command"]);
  $message = cleanInput($_POST["message"]);
  $filename = "log_.php";

  //So, if we can open/create (see fopen() manual to understand how to "a+" works
  if( $fh = fopen($filename,"a+") ){
    //create a string using "nice" format
    $complete_message = "[{$date}]";
    $complete_message .= " - <$command> {$message}\n";
    //write message on file
    fputs( $fh, "{$complete_message}", strlen($complete_message) );
    //closing file handle
    fclose( $fh );
    return TRUE;
  }else{
    return FALSE;
  }
}

function read_message(){
  //opening file to read it
  $filename = "log_.php";
  $fp = fopen($filename, "r");
  if($fp){
    //while file not at end of file
    while(!feof($fp)){
      $line = fgets($fp);
      echo $line;
    }
  } else {
    $line = FALSE;
  }
}

function fail($params){
  //modifying response header
  return header("HTTP/1.0 500 {$params}");
}

if (($_POST["message"] != "" && $_POST["message"] != "clear") && ($_POST["command"] !="" && $_POST["command"] != "clear")) {

  $write = log_message($_POST);
  if ($write) {
    $read = read_message();
    if (!$read) {
      $message = $read;
      echo $message;
    }else{
      fail("Can't read file");
    }
  } else {
      fail("Can't write file");
  }
} elseif ($_POST["command"] == "clear" && $_POST["message"] == "clear") {
  clear_log();
  fail("Cleared log");
} else {
  fail("Please, sendme a command");
}

if ($_POST["action"] == "refresh"){
  $read = read_message();
  if (!$read) {
    $message = $read;
    echo $message;
  }
}

?>

Suponiendo que desean ver bien “2.0″ su log tracker, bueno, pues aquí les dejo el código de la pantallita html en la que pueden observar el comportamiento del archivo:

<html>
<head>
<style>
body{
  background: #000;
  color: #fdfdfd;
}

#message_board{
  width: 800px;
  height: 400px;
  margin-right:10px;
  margin-left:25px;
  padding-top:5px;
  padding-bottom:5px;
  border: 2px dotted #ccc;
  background: #E0E0E0;
  color: #1B4025;
}

#command_board{
  margin-right:10px;
  margin-left:25px;
  padding-top:10px;
  padding-bottom:5px;
}
</style>
<script type='text/javascript' src='prototype.js'></script>
<script type='text/javascript'>
function post_message(){
  var command = $F("command");
  var message = $F("message");
  var wrapper = $("message_board");

  new Ajax.Request("http://localhost/write.php",{
    method:'post',
    parameters: {message: message, command:command},
    evalScripts: false,
    evalJS: false,
    onComplete: function (transport){
      wrapper.update(transport.responseText);
      wrapper.scrollTop = wrapper.scrollHeight;
      $("message").value = "";
    },
    onFailure: function(transport) {
      alert(transport.statusText);
    }
  });

}

function refrescar(){
  var wrapper = $("message_board");
  new Ajax.Updater("message_board", "http://localhost/read.php");
  wrapper.scrollTop = wrapper.scrollHeight;
}

</script>
</head>
<body>
<textarea id="message_board" style="display:block" cols="80" rows="3" readonly></textarea>
<br>
<div id="command_board">
Command: <input type="text" id="command" size="15"><br>
Message:<textarea id="message" style="display:block" cols="45" rows="3"></textarea>
<input type="button" name="send" value="send" onclick="javascript:post_message();">
<input type="button" name="refresh" value="refresh" onclick="javascript:refrescar();">
</div></body>
</html>

Aunque se puede enviar “el comando clear y refresh” en este archivo de HTML también mando llamar al archivo read.php, éste es el código fuente del mencionado:

<?php
$filename = "log_.php";
$fp = fopen($filename, "r");
if($fp){
  while(!feof($fp)){
    $line = fgets($fp);
    echo $line;
  }
}
?>

Espero les sea de utilidad para leer y escribir archivos, obviamente se pueden hacer muchas más cosas, pero esa base se me hace buena para entender la función y comportamiento del manejo de archivos con PHP.

//Happy coding

SociBook del.icio.us Digg Facebook Google Yahoo Buzz StumbleUpon

  One Response to “How to write and read files from php”

  1. mas claro ni el agua ¬¬

    que alguien me explique!!!

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

   
© 2011 Geekeandome Suffusion theme by Sayontan Sinha