Telepieza es un mezcla de ayuda, información, opinión, ocio, negocio y diversión, esperamos que todos vosotros os sintaís en vuestra casa.

Archivo de la Categoría PHP

En el apartado (buscar de Forma automática el cambio de Divisa (I) , nos quedamos en la instrucción fsockopen() devuelve un puntero a fichero, el cual se puede usar junto con las otras funciones de ficheros (como fgets(), fgetss(), fputs(), fclose(), feof()).

Voy a colgar el programa en PHP que está funcionando desde hace muchos meses sin dar ningún tipo de error para localizar el cambio de divisa desde un Hosting con la instrucción fsockopen()

El programa php currency_class.php es una clase y la he llamado currency_class.php, ire comentando casi todas las instrucciones para su mejor comprensión.

PROGRAMA REALIZADO PARA PHP LLAMADO CURRENCY_CLASS.PHP SIENDO LA CLASE Currency.

<?php
/**
* @version  $Id: currency_class.php
* @package  mvmphp
* @copyright Copyright (C) 2009
* @comment      Clase Currency (Buscar Valor de la Divisa)
*/

class Currency {
// Por defecto para toCurr es USD = Dólares y fromCurr es EUR = Euros 

 public $toCurr   = ‘USD’; 
 public $fromCurr = ‘EUR’;
 // Constructor de la Clase, si los parametros a pasar son diferentes de null, pasamos los valores a las variables de la clase
 function __construct($p_curr=null, $p_from=null) {
  if ($p_curr != null ) $this->toCurr   = $p_curr;
  if ($p_from != null) $this->fromCurr = $p_from; 
  $this->toAmount = 1;  // Valor es siempre 1
 }  
 
/**
* Busca mediante la tecnica del Socker del puerto 80 en google el valor de la divisa
* Si es correcto devuelve una página para después localizar el cambio de la divisa
*/
 function getCurrencyGoogle() {

 $host = ‘www.google.com’;
 $page = ‘/search?&q=’.$this->toAmount.’+’.$this->toCurr.’+in+’.$this->fromCurr;
 $file_info = ”;   $get_info = false;  $returnHtml = array();  $t_d=”; 

# Open Socker (Google) y search con las dos divisas con valor 1
 if ($fsock = @fsockopen($host, $port=80, $errno, $errstr, $timeout=15))
 {
# Pagina y valores a buscar en el servidor
  @fputs($fsock, “GET $page HTTP/1.1\r\n”);
# DNS o IP del Host
  @fputs($fsock, “HOST: $host\r\n”);
# Tipo de Conexion y cierre
  @fputs($fsock, “Connection: close\r\n\r\n”);
  while (!@feof($fsock))
  {  
# A partir de la Segunda Lectura grabamos la informacion en $file_info para su posterior tratamiento
   if ($get_info) $file_info .= @fread($fsock, 1024);
   else
   {
# Por primera vez eliminamos la cabecera y controlamos errores de conexion
    $line = @fgets($fsock, 1024);
    if ($line == “\r\n”) $get_info = true;
    else if (stripos($line, ’404 not found’) !== false)
    {
     $errstr = ‘FILE_NOT_FOUND’ . ‘: ‘ . $host . $page;
     error_log_event(‘ Currency 01-Error : ‘,$errstr ); 
     return false;
    }
   }
  }
  @fclose($fsock);
 }
 else
 {
  if ($errstr) { $errstr = utf8_convert_message($errstr);
                 error_log_event(‘ Currency 02-Error : ‘,$errstr );
                       return false;  }
  else     { $errstr = ‘FSOCK_DISABLED’;  
                 error_log_event(‘ Currency 03-Error : ‘,$errstr );
        return false; }
 }

Lee el resto de esta entrada »

Share

 Existen muchas técnicas diferentes para buscar el cambio de una divisa en lenguaje PHP en otro servidor que no sea el tuyo (Por ejemplo : European Center Bank). Generalmente el cambio de las divisas del día lo dan servidores de Bancos, Instituciones Económicas, Prensa especializada en economía, Las Bolsas de todo el Mundo ,  los buscadores como yahoo, google y demás organizaciones que están especializados en Importación/Exportación de Divisas.

 Para poder leer un fichero HTML en otro ordernador en PHP podemos utilizar la funcion :  file_get_contents()  y para poder leer un fichero en otro servidor en XML la funcion : simplexml_load_file()

Dichas funciones funcionan perfectamente si las utilizamos en programa PHP que sus máquinas son controladas por nuestro Dpto. Informático o en ordenadores locales con conexión a Internet.

 Las técnicas que estamos utilizando para buscar el valor de divisa en los formatos ya explicados anteriormente, son muy factibles porque dichas organizaciones nos dejan dichos ficheros en sitios públicos, para que otras compañías puedan acceder a leer libremente dichos ficheros.

 Pero la sorpresa es cuando una aplicación realizada en PHP  la ejecutamos en un HOSTING,  y vemos con sorpresa que dichas funciones nos dan error,  porque el Servidor del Hosting no permite acceder a otros Ordenadores con dichas funciones para leer los ficheros que nosotros necesitamos en nuestra aplicación.

Para solucionar el problema existe una función : fsockopen() que nos puede ayudar a leer ficheros HTML y TXT, para poder leer ficheros de otros servidores sin que el HOSTING nos corte el acceso a las máquinas remotas que deseamos acceder.

La funcion fsockopen()  abre una conexión de dominio Internet o Unix via sockets. su descripción es : 

   int fsockopen( string hostname, int port [, int errno [, string errstr [, double timeout]]])

 fsockopen() : Inicia una conexión de dominio Internet  o Unix.

 Para el domino Internet, abrirá una conexión TCP hacia el ordenador hostname en el puerto port.

 Para el dominio Unix, hostname se usará como ruta al socket, port debe ser 0 para este caso, el parámetro opcional timeoutse puede usar para especificar un timeout en segundos para establecer la conexión.

fsockopen() devuelve un puntero a fichero, el cual se puede usar junto con las otras funciones de ficheros (como fgets(), fgetss(), fputs(), fclose(), feof()).

En el siguiente post realizaremos un programa con fsockopen() para extraer el cambio de la divisa desde un servidor.

Share

 Existen muchos productos informáticos que ofrecen una solución de ERP, CRM o CMS por Internet.  Dichos productos pueden ser Open Source (licencia Gratuita) como Openbravo, osCommerce , Joomla , SugarCRM,  o de pago (Licencia por Uso),  empresas que se dedican a comercializar productos por tener una exclusiva de distribución o paquetes informáticos desarrollados por ellos mismos.

 Pero si nos movemos en el mundo de la importación de mercancía entre diferentes culturas, por ejemplo España y China, aquí empezamos a tener problemas de idioma en cualquier tipo de producto Open Source que existe en la actualidad.

 Generalmente un producto Open Source cuando es configurado,  le tienes que indicar el idioma de arranque por defecto, pero si tiene que ser visto por dos culturas simultaneas en sus idiomas correspondientes, el idioma por defecto no funciona en una de las culturas.

 Pongo un ejemplo : Imaginaros que compro productos en China y los vendo en España, mis proveedores de china cuando entran a la web,  para consultar mis pedidos tienen que ver la página principal en chino antes de identificarse con el Usuario y Contraseña. Mis clientes de España cuando entran en la página Web la tienen que ver en Español antes de identificarse en la página web.

 Si trabajamos con un idioma por defecto, por ejemplo el Español, los chinos no tienen ni idea de dicho idioma, pero sí conocen el ingles. Si ponemos el Chino por defecto en nuestra página web , aquí tenemos un serio problema,  porque existen dos tipos de lenguas, el simplificado y el tradicional. (Cuál colocar cómo lengua por defecto).

 Podemos poner cómo idioma por defecto el inglés, pero en España como en China aún no está lo suficientemente arraigado dicho idioma en el pueblo y por dicho motivo no es posible introducirlo como idioma por defecto en nuestra Web. 

 Muchas veces crees que el idioma por defecto de un paquete informático es la solución, pero cuando trabajas con dos culturas diferentes, pasa a ser un problema de grandes dimensiones para nuestro negocio de Importación o Exportación entre diferentes continentes.

Share

 En las aplicaciones por Internet cada vez es más popular el soportar varios idiomas a la vez. Existe una reglamentación el ISO-639 que regula el idioma. Tiene que ser dos dígitos y en minúsculas.

La lista está en : http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt

 Existe otro reglamento el ISO-3166 que regula los países. Tienen que ser dos dígitos y en mayúsculas.

La lista está en : http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html   
 
 Para indicar un idioma y un país en concreto se unen los dos dígitos en minusculas del idioma y los dos dígitos del país en mayúsculas unidos por un guión _.

Varios ejemplos :

  • “es_ES”   Español es España.
  • “ca_ES”   Catalán en España. 
  • ‘es_MX”  Español en Mexico.

Todo esto lo explico porque cada vez más se implementan los idiomas en lenguajes de programación orientados a Objetos como el JAVA , C++ y el PHP, que pueden tener la clase locale para gestionar los idiomas, dicha clase se regula según la reglamentación ISO-639 e ISO-3166.

Les dejo abajo todas las posibles combinaciones que existen entre los idiomas y los paises :

Value Description   Value Description
ar Arabic   fi Finnish
ar_AE Arabic (United Arab Emirates)   fi_FI Finnish (Finland)
ar_BH Arabic (Bahrain)   fr French
ar_DZ Arabic (Algeria)   fr_BE French (Belgium)
ar_EG Arabic (Egypt)   fr_CA French (Canada)
ar_IQ Arabic (Iraq)   fr_CH French (Switzerland)
ar_JO Arabic (Jordan)   fr_FR French (France)
ar_KW Arabic (Kuwait)   fr_LU French (Luxembourg)
ar_LB Arabic (Lebanon)   hi_IN Hindi (India)
ar_LY Arabic (Libya)   hr Croatian
ar_MA Arabic (Morocco)   hr_HR Croatian (Croatia)
ar_OM Arabic (Oman)   hu Hungarian
ar_QA Arabic (Qatar)   hu_HU Hungarian (Hungary)
ar_SA Arabic (Saudi Arabia)   id Indonesian
ar_SD Arabic (Sudan)   is Icelandic
ar_SY Arabic (Syria)   is_IS Icelandic (Iceland)
ar_TN Arabic (Tunisia)   it Italian
ar_YE Arabic (Yemen)   it_CH Italian (Switzerland)
be Belarusian   it_IT Italian (Italy)
be_BY Belarusian (Belarus)   iw Hebrew
bg Bulgarian   iw_IL Hebrew (Israel)
bg_BG Bulgarian (Bulgaria)   ja Japanese
ca Catalan   ja_JP Japanese (Japan)
ca_ES Catalan (Spain)   ko Korean
cs Czech   ko_KR Korean (Korea)
cs_CZ Czech (Czech Republic)   lt Lithuanian
da Danish   lt_LT Lithuanian (Lithuania)
da_DK Danish (Denmark)   lv Latvian
de German   lv_LV Latvian (Latvia)
de_AT German (Austria)   mk Macedonian
de_CH German (Switzerland)   mk_MK Macedonian (Macedonia)
de_DE German (Germany)   nl Dutch
de_LU German (Luxembourg)   nl_BE Dutch (Belgium)
el Greek   nl_NL Dutch (Netherlands)
el_GR Greek (Greece)   no Norwegian
en English   no_NO Norwegian (Norway)
en_AT English (Austria)   no_NO_NY Norwegian (Norway,Nynorsk)
en_AU English (Australia)   pl Polish
en_BR English (Brazil)   pl_PL Polish (Poland)
en_CA English (Canada)   pt Portuguese
en_CH English (Switzerland)   pt_BR Portuguese (Brazil)
en_DE English (Germany)   pt_PT Portuguese (Portugal)
en_DK English (Demark)   ro Romanian
en_ES English (Spain)   ro_RO Romanian (Romania)
en_FI English (Finland)   ru Russian
en_FR English (France)   ru_RU Russian (Russia)
en_GB English (Great Britain)   sk Slovak
en_HK English (Hong Kong)   sk_SK Slovak (Slovakia)
en_IE English (Ireland)   sl Slovenian
en_IN English (India)   sl_SI Slovenian (Slovenia)
en_IT English (Italy)   sq Albanian
en_JP English (Japan)   sq_AL Albanian (Albania)
en_KR English (Korea)   sr Serbian
en_MX English (Mexico)   sv Swedish
en_NL English (Netherlands)   sv_SE Swedish (Sweden)
en_NO English (Norway)   th Thai
en_NZ English (New Zealand)   th_TH Thai (Thailand)
en_SE English (Sweden)   tr Turkish
en_SG English (Singapore)   tr_TR Turkish (Turkey)
en_TW English (Taiwan)   uk Ukrainian
en_US English (United States)   uk_UA Ukrainian (Ukraine)
en_ZA English (South Africa)   vi Vietnamese
es Spanish   vi_VN Vietnamese (Vietnam)
es_AR Spanish (Argentina)   zh Chinese
es_BO Spanish (Bolivia)   zh_CN Chinese (China)
es_CL Spanish (Chile)   zh_HK Chinese (Hong Kong)
es_CO Spanish (Colombia)   zh_TW Chinese (Taiwan)
es_CR Spanish (Costa Rica)      
es_DO Spanish (Dominican)      
es_EC Spanish (Ecuador)      
es_ES Spanish (Spain)      
es_GT Spanish (Guatemala)      
es_HN Spanish (Honduras)      
es_MX Spanish (Mexico)      
es_NI Spanish (Nicaragua)      
es_PA Spanish (Panama)      
es_PE Spanish (Peru)      
es_PR Spanish (Puerto Rico)      
es_PY Spanish (Paraguay)      
es_SV Spanish (El Salvador)      
es_UY Spanish (Uruguay)      
es_VE Spanish (Venezuela)      
et Estonian      
et_EE Estonian (Estonia)      
Share

Vamos a realizar un pequeño resumen en la 5ª parte de lo aprendido sobre JPSpan y PHP antes de seguir aprendiendo más cosas sobre la tecnología AJAX – JPSpan – PHP.

jpspan_05.jpg

……………………………………………………..

1.- JPSpan se comunica mediante HTTP, define la sintaxis y la semántica que utilizan los elementos software de la arquitectura web (clientes, servidores, proxies) para comunicarse. Es un protocolo orientado a transacciones y sigue el esquema petición-respuesta entre un cliente y un servidor.

2.- JPSpan utiliza el Objeto XMLHttpRequest (XHR), también referida como XMLHTTP (Extensible Markup Language / Hypertext Transfer Protocol), es una interfaz empleada para realizar peticiones HTTP y HTTPS a servidores WEB. Para los datos transferidos se usa cualquier codificación basada en texto, incluyendo: texto plano, PHP, XML, JSON, HTML. Dicho objeto lo tenéis en JPSpan/js/httpclient.js

3.- JPSpan utiliza la técnica de reflexión de objetos. La reflexión es un proceso mediante el cual un programa es capaz de obtener información sobre si mismo y por tanto es capaz de auto modificarse en tiempo de ejecución. JavaScript emplea el concepto de reflexión para permitir descubrir propiedades y métodos de objetos externos. El ejemplo más sencillo es el de averiguar si un objeto posee un determinado método y así poder ejecutarlo (Eso es lo que hace JPSpan).

Lee el resto de esta entrada »

Share

jpspan_04.jpg Nos vamos a centrar en la 4ª parte en estudiar el método  displayClient(), por ser el encargado de generar el esquema de código JavaScript necesario para la comunicación.

Cómo hemos indicado JPSpan proporciona al Cliente el código JavaScript necesario para realizar llamadas a la clase en el lado del servidor y hacer que la página pueda gestionar las llamadas en sí.

La función displayCliente(), está en la página /JPSpan/Server.php y es :

/**
* Display the Javascript client and exit
* @return void
* @access public
*/
function displayClient() {
$G = & $this->getGenerator();
require_once JPSPAN . ‘Include.php’;
$I = & JPSpan_Include::instance();
// HACK – this needs to change
$I->loadString(__FILE__,$G->getClient());
$client = $I->getCode();
header(‘Content-Type: application/x-javascript’);
header(‘Content-Length: ‘.strlen($client));
echo $client;

}

Lo importante de dicho método es la generación de la variable $client, es donde está todo el código JavaScript generado por JPSpan en función a los parámetros que le hemos enviado, por ejemplo, indicar que el código de transmisión de los argumentos (variables) sea por ‘php’, ‘xml’ o json’ o Comprimir el código JavaScript mediante la página script.php.

Cómo no es posible visualizar por pantalla la variable $client, vamos a introducir tres líneas nuevas de código php (ver abajo en rojo la incorporación) para grabar dicha variable en un fichero con nombre ‘logclient.txt’ para analizar su contenido en profundidad y es :

/**
* Display the Javascript client and exit
* @return void
* @access public
*/
function displayClient() {
$G = & $this->getGenerator();
require_once JPSPAN . ‘Include.php’;
$I = & JPSpan_Include::instance();
// HACK – this needs to change
$I->loadString(__FILE__,$G->getClient());
$client = $I->getCode();
$t_log_fp   = fopen(‘logclient.txt’, ‘w’);
fwrite($t_log_fp, $client );
fclose($t_log_fp);
header(‘Content-Type: application/x-javascript’);
header(‘Content-Length: ‘.strlen($client));
echo $client;
}

La primera instrucción insertada por nosotros $t_log_fp  = fopen(‘logclient.txt, ‘w’); le indicamos que abra el fichero de modo escritura, si no existe lo crea, y que empiece en el primer registro al indicar la letra ‘w’.

La segunda instrucción  fwrite($t_log_fp, $clientn ); le indicamos que grabe en dicho fichero la variable $client.

La tercera instrucción fclose($t_log_fp); le indicamos que cierre el fichero logclient.txt.

NOTA : Cuando activamos el programa realizado en html con el navegador y llama al programa jpspan_server.php del servidor, grabará en la carpeta  (donde ha sido llamado el programa jpspan_server.php) el fichero logclient.txt con todas las instrucciones javascript necesarias para poder realizar la comunicación.

Podemos ver el fichero una vez generado : FICHERO LOGCLIENT.TXT

Lee el resto de esta entrada »

Share

 Si desea contactar con telepieza, puede enviar un e-mail a: telepieza@telepieza.com.
Normas de uso y Politica de privacidad .Telepieza empezó el 20/12/2007 a las 18h (Hora Española).
 Ayude a financiar Telepieza en Internet, picando un anuncio de su interes en nuestro Weblog.