Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - alpha

Páginas: [1]
1
PHP / Re:Ley electoral D'hondt automatizada con PHP
« en: 19 de Septiembre de 2014, 21:12:03 pm »
En el 2003 hice para el curro una web para gestionar los resultados electorales.

En una tabla se introducía la lista de municipios, a partir de ahí toda la configuración era mediante web.

Se especificaba para cada municipio el tipo de elección (sistema electoral), el censo y el número de concejales a elegir. También para cada municipio se especificaban las listas electorales (el nombre de cada partido con sus candidatos).

Una vez con todos los datos preparados se procedía a introducir los resultados, los votos Nulos, los Blancos y a cada Partido. Con esos datos la web te mostraba la tabla de divisiones y los concejales obtenidos para cada candidatura.

Lo curioso es que he podido recuperar todo el tinglado y funciona sin cambios en un XAMPP con PHP 5.6: bestial!!!

No voy a colgar todo porque es un lio de entender, a ver si tengo tiempo y extraigo el algoritmo que diseñe para el cálculo de escaños/concejales según el sistema D'Hondt... lo que si recuerdo es que me estuve toda una noche en vela emborronando papeles hasta que a las 7 y 8 de la mañana di con el algoritmo que tengo implementado.

Un saludo

2
Hola, yo siempre suelo comenzar mis scripts con una serie de "define", como la mayoría de mis scripts suelen ser para línea de comandos, utilizo una selección de estos:
Código: [Seleccionar]
<?php
  define
(&#39;NUL&#39;,  &quot;\x00&quot;);  // \x00      Null
  
define(&#39;SOH&#39;,  &quot;\x01&quot;);  // \x01      Start Of Heading
  
define(&#39;STX&#39;,  &quot;\x02&quot;);  // \x02      Start Of Text
  
define(&#39;ETX&#39;,  &quot;\x03&quot;);  // \x03      End Of Text
  
define(&#39;EOT&#39;,  &quot;\x04&quot;);  // \x04      End Of Transmission
  
define(&#39;ENQ&#39;,  &quot;\x05&quot;);  // \x05      Enquiry
  
define(&#39;ACK&#39;,  &quot;\x06&quot;);  // \x06      Acknowledge

  
define(&#39;BEL&#39;,  &quot;\x07&quot;);  // \x07  \a  Bell
  
define(&#39;BS&#39;,  &quot;\x08&quot;);  // \x08  \b  Backspace
  
define(&#39;HT&#39;,  &quot;\x09&quot;);  // \x09  \t  Horizontal Tab
  
define(&#39;LF&#39;,  &quot;\x0A&quot;);  // \x0A  \n  Line feed
  
define(&#39;VT&#39;,  &quot;\x0B&quot;);  // \x0B  \v  Vertical Tab
  
define(&#39;FF&#39;,  &quot;\x0C&quot;);  // \x0C  \f  Form feed
  
define(&#39;CR&#39;,  &quot;\x0D&quot;);  // \x0D  \r  Carriage return

  
define(&#39;SO&#39;,  &quot;\x0E&quot;);  // \x0E      Shift Out
  
define(&#39;SI&#39;,  &quot;\x0F&quot;);  // \x0F      Shift In
  
define(&#39;DLE&#39;,  &quot;\x10&quot;);  // \x10      Data Link Escape
  
define(&#39;DC1&#39;,  &quot;\x11&quot;);  // \x11      Device Control 1 (XON)
  
define(&#39;DC2&#39;,  &quot;\x12&quot;);  // \x12      Device Control 2
  
define(&#39;DC3&#39;,  &quot;\x13&quot;);  // \x13      Device Control 3 (XOFF)
  
define(&#39;DC4&#39;,  &quot;\x14&quot;);  // \x14      Device Control 4
  
define(&#39;NAK&#39;,  &quot;\x15&quot;);  // \x15      Negative Acknowledge
  
define(&#39;SYN&#39;,  &quot;\x16&quot;);  // \x16      Sychronous Idle
  
define(&#39;ETB&#39;,  &quot;\x17&quot;);  // \x17      End of Transmission Block
  
define(&#39;CAN&#39;,  &quot;\x18&quot;);  // \x18      Cancel
  
define(&#39;EM&#39;,  &quot;\x19&quot;);  // \x19      End of Medium
  
define(&#39;SUB&#39;,  &quot;\x1A&quot;);  // \x1A      Substitute
  
define(&#39;ESC&#39;,  &quot;\x1B&quot;);  // \x1B      Escape
  
define(&#39;FS&#39;,  &quot;\x1C&quot;);  // \x1C      File Separator
  
define(&#39;GS&#39;,  &quot;\x1D&quot;);  // \x1D      Group Separator
  
define(&#39;RS&#39;,  &quot;\x1E&quot;);  // \x1E      Record Separator
  
define(&#39;US&#39;,  &quot;\x1F&quot;);  // \x1F      Unit Separator
  
define(&#39;SP&#39;,  &quot;\x20&quot;);  // \x20     Space

  
define(&#39;DEL&#39;,  &quot;\x7F&quot;);  // \x7F      Delete

  
define(&#39;CRLF&#39;, &quot;\r\n&quot;);
?>


¿Cuales soléis utilizar?

3
PHP / Clase CalameoAPI
« en: 19 de Septiembre de 2014, 06:46:10 am »
Una clase para utilizar la API de Calaméo.

La hice hará cosa de un año y desde entonces la utilizo a diario en una página web que funciona con CakePHP.

Para los que quieran saber algo más: CalameoAPI

El meollo: en el adjunto, la clase tiene casi 1000 líneas...

4
PHP / Clase Wget
« en: 19 de Septiembre de 2014, 06:02:18 am »
Hola, he creado una clase para leer páginas web, bajarse archivos... la he utilizado para bajarme los paquetes de instalación de PHP y los de las extensiones PECL que suelo utilizar, por ejemplo.

Por supuesto su utilidad depende de la imaginación y necesidades de cada uno.

La historia y el código lo podéis leer en http://alphaonphp.blogspot.com.es/p/clase-wget.html

Para el que no quiera entretenerse con historias aquí está el meollo (también adjunto):

Código: [Seleccionar]
<?php

  
if (!defined(&#39;STDOUT&#39;)) {
    
define(&#39;STDOUT&#39;, fopen(&#39;php://stdout&#39;, &#39;w&#39;));
  
}

  if (!
function_exists(&#39;curl_strerror&#39;)) {
    
function curl_strerror ($curl_error) {
      return 
$curl_error;
    }
  }

  if (!
function_exists(&#39;simplexml_import_html&#39;)) {
    
function simplexml_import_html ($html) {
      
$doc = new DOMDocument();
      @
$doc->loadHTML($html);
      
$xml simplexml_import_dom($doc);
      return 
$xml;
    }
  }

  class 
wget {
    protected 
$curl null;
    protected 
$cookie_jar = &#39;&#39;;

    
public function __construct ($useragent null$cookie_jar = &#39;&#39;) {
      
$this->curl curl_init();
      
$this->cookie_jar $cookie_jar;
      if (isset(
$useragent)) curl_setopt($this->curlCURLOPT_USERAGENT$useragent);
      
curl_setopt($this->curlCURLOPT_ENCODING, &#39;&#39;);
      
curl_setopt($this->curlCURLOPT_PROGRESSFUNCTION, array($this, &#39;progress&#39;));
      
curl_setopt($this->curlCURLOPT_FILETIMEtrue);
      
curl_setopt($this->curlCURLOPT_COOKIESESSIONtrue);
      
curl_setopt($this->curlCURLOPT_COOKIEFILE$this->cookie_jar);
      
curl_setopt($this->curlCURLOPT_COOKIEJAR$this->cookie_jar);
    }

    public function 
__destruct () {
      
curl_close($this->curl);
    }

    protected function 
progress () {
      static 
$url null;
      static 
$progress_bar null;

      
$curl_info curl_getinfo($this->curl);
      if (
$url == $curl_info[&#39;url&#39;]) echo str_repeat("\x08", strlen($progress_bar));

      
$url $curl_info[&#39;url&#39;];
      
$progress_bar null;
      if (
$curl_info[&#39;http_code&#39;] == 200) {
        
$down_perc 0;
        if (
$curl_info[&#39;size_download&#39;] <= $curl_info[&#39;download_content_length&#39;]) $down_perc = (100 * $curl_info[&#39;size_download&#39;]) / $curl_info[&#39;download_content_length&#39;];
        
$eta = &#39;N/A&#39;;
        
if ($curl_info[&#39;speed_download&#39;]) $eta = ($curl_info[&#39;download_content_length&#39;] - $curl_info[&#39;size_download&#39;]) / $curl_info[&#39;speed_download&#39;];
        
$progress_bar sprintf(&#39;[%-30s] %3d%% %02.3fs %02.3fs&#39;, str_repeat(&#39;#&#39;, 30 * $down_perc / 100), $down_perc, $eta, $curl_info[&#39;total_time&#39;]);
      
}
      echo 
$progress_bar"\x20\x08";
    }

    public function 
set_auth ($user null$pass null$auth null) {
      if (empty(
$auth)) $auth CURLAUTH_ANY;
      
curl_setopt($this->curlCURLOPT_HTTPAUTH$auth);
      
curl_setopt($this->curlCURLOPT_USERPWD$user . &#39;:&#39; . $pass);
    
}

    public function 
set_ssl_verifypeer ($ssl_verifypeer false) {
      
curl_setopt($this->curlCURLOPT_SSL_VERIFYPEER$ssl_verifypeer);
    }

    public function 
set_verbose ($verbose true) {
      
curl_setopt($this->curlCURLOPT_VERBOSE, (bool) $verbose);
    }

    public function 
set_followlocation ($follow true) {
      
curl_setopt($this->curlCURLOPT_FOLLOWLOCATION, (bool) $follow);
    }

    public function 
set_maxredirs ($maxredirs 0) {
      
curl_setopt($this->curlCURLOPT_MAXREDIRS, (int) $maxredirs);
    }

    public function 
set_header_out ($header_out true) {
      
curl_setopt($this->curlCURLINFO_HEADER_OUT, (bool) $header_out);
    }

    public function 
set_header ($header null) {
      
curl_setopt($this->curlCURLOPT_HTTPHEADER$header);
    }

    public function 
info_url ($url$referer null) {
      
curl_setopt($this->curlCURLOPT_HTTPGETtrue);
      
curl_setopt($this->curlCURLOPT_URL$url);
      
curl_setopt($this->curlCURLOPT_REFERER$referer);
      
curl_setopt($this->curlCURLOPT_NOPROGRESStrue);
      
curl_setopt($this->curlCURLOPT_NOBODYtrue);
      
curl_setopt($this->curlCURLOPT_FILESTDOUT);
      
curl_setopt($this->curlCURLOPT_RETURNTRANSFERtrue);
      
$body curl_exec($this->curl);
      
$curl_info curl_getinfo($this->curl);
      
$curl_info[&#39;body&#39;] = $body;
      
$curl_info[&#39;curl_errno&#39;] = curl_errno($this->curl);
      
$curl_info[&#39;curl_strerror&#39;] = curl_strerror($curl_info[&#39;curl_errno&#39;]);
      
return $curl_info;
    }

    public function 
get_url ($url$referer null$post_fields null) {
      
curl_setopt($this->curlCURLOPT_POSTis_array($post_fields));
      
curl_setopt($this->curlCURLOPT_POSTFIELDS$post_fields);
      
curl_setopt($this->curlCURLOPT_HTTPGET, !is_array($post_fields));
      
curl_setopt($this->curlCURLOPT_URL$url);
      
curl_setopt($this->curlCURLOPT_REFERER$referer);
      
curl_setopt($this->curlCURLOPT_NOPROGRESStrue);
      
curl_setopt($this->curlCURLOPT_NOBODYfalse);
      
curl_setopt($this->curlCURLOPT_FILESTDOUT);
      
curl_setopt($this->curlCURLOPT_RETURNTRANSFERtrue);
      
$body curl_exec($this->curl);
      
$curl_info curl_getinfo($this->curl);
      
$curl_info[&#39;body&#39;] = $body;
      
$curl_info[&#39;curl_errno&#39;] = curl_errno($this->curl);
      
$curl_info[&#39;curl_strerror&#39;] = curl_strerror($curl_info[&#39;curl_errno&#39;]);
      
return $curl_info;
    }

    public function 
get_file ($url$filename null$referer null$progress true) {
      if (empty(
$filename)) $filename parse_url($urlPHP_URL_HOST) . parse_url($urlPHP_URL_PATH);
      if (!
is_dir(dirname($filename))) mkdir(dirname($filename), 0775true);

      
$file_handle fopen($filename, &#39;w&#39;);

      
curl_setopt($this->curlCURLOPT_HTTPGETtrue);
      
curl_setopt($this->curlCURLOPT_URL$url);
      
curl_setopt($this->curlCURLOPT_REFERER$referer);
      
curl_setopt($this->curlCURLOPT_NOPROGRESS, (!$progress));
      
curl_setopt($this->curlCURLOPT_NOBODYfalse);
      
curl_setopt($this->curlCURLOPT_RETURNTRANSFERfalse);
      
curl_setopt($this->curlCURLOPT_FILE$file_handle);
      
curl_exec($this->curl);

      
fclose($file_handle);

      
$curl_info curl_getinfo($this->curl);
      
touch($filename$curl_info[&#39;filetime&#39;]);

      
$curl_info[&#39;filename&#39;] = $filename;
      
$curl_info[&#39;curl_errno&#39;] = curl_errno($this->curl);
      
$curl_info[&#39;curl_strerror&#39;] = curl_strerror($curl_info[&#39;curl_errno&#39;]);
      
return $curl_info;
    }
  }
?>

5
Presentaciones / <?php echo 'Hola mundo!'; ?>
« en: 19 de Septiembre de 2014, 05:50:42 am »
Hola, me llamo Fernando, aunque suelo utilizar alpha y alphp como nicks en los foros.

Peino ya algunas canas y llevo programando tres cuartas partes de mi vida, la mitad de ese tiempo en PHP (desde 1999).

Me he lanzado, por fin, con un blog para ir colgando esos trocitos de código que con esfuerzo he ido creando con la esperanza de que sean útiles al menos de manera didáctica.

No sé si me podré pasar mucho por aquí, ya que son muchas las obligaciones y poco el tiempo, pero espero ir aportando alguna contribución al foro.

Un saludo

Páginas: [1]