Mostrando entradas con la etiqueta Php. Mostrar todas las entradas
Mostrando entradas con la etiqueta Php. Mostrar todas las entradas

miércoles, 6 de abril de 2016

Provar en local enviar correos con Postman

Creo que esto podría servir para cualquier tecnología. Pero me voy a enfocar en el plugin de Postman para wordpress en PHP.

Pasos:

1.) Debemos instalar Python con todos los utilitarios.

2.) Ejecutar el comando en una terminal
Nota: La terminal mostrara en consola todo los correos que se envíen a este servidor de pruebas.

sudo python -m smtpd -n -c DebuggingServer localhost:45

3.) Debemos ir a la configuración del postman del wordpress.
Luego en Configuración manual.



Dentro es simplemente de poner:

Outgoing mail server hostname:......127.0.0.1
Outgoing mail server port:................45
Security:..............................................None
Authentication:...................................None


4.) Enviamos un mail de pruebas.


5.) Este correo lo podremos ver en la terminal.



martes, 18 de octubre de 2011

Algunos trucos con el httpd.conf y php.init

Php en su archivo de configuración tiene una serie de atributos interesantes. Muchos de los cuales en mi vida he visto y otros que no les presto mucha importancia. Curiosamente hace un par de semanas atrás, mi jefe directo me asigno una misión bastante peculiar. Tenia que hacer funcionar local un aplicación. No voy a rondar en detalles. Si los quieren leer pueden verlos aquí.

En mi búsqueda de hacer funcionar dicha aplicación me tope con algunas variables en los archivos de configuración en el php y en el apache que quiero compartir por aca:
 
Primer truco

Uno muy interesante es poder anular los warning en php.
Usando la variable siguente en el php.init:

error_reporting = E_ALL & ~E_NOTICE

Esto le dice al Php que muestre los errores, pero no los warning o Notice como se les conoce. Entonces imaginemos que en el php creamos un array o tratamos de acceder alguna variable global y después simplemente tratamos de acceder sus datos con un índice que no existe.

Ejemplo:

echo $_REQUEST["email"]; 

Si esta variable no se encuentra configurada en el php.init, el warning es mostrado.

Sin embargo puede presentar problemas intensos de hackeo. Yo no recomendara utilizarlos.

Segundo Truco

Otro truco que si me parece mas util de usar es el: auto_prepend_fileauto_append_file. Estos son archivos que se cargan al inicio de cualquier script y despues de cualquier otros script en su orden respectivamente.

Un ejemplo seria algo asi como:
auto_prepend_file = /home/sites/koza/phpdefines.php

Esta variable auto carga o auto ejecuta este script antes de cualquier ejecusion. Es equivalente a:

inlcude('/home/sites/koza/phpdefines.php');

En el incio de cualquier script.

Tercer Truco

Ejecutar los script en php en archivos con extensión html. Al inicio pensé que esto seria de lo mas trivial del mundo. Honestamente confieso que me tomo más tiempo del que pensé. Realmente es trivial, pero encontrar el lugar para poner la configuración fue lo que me tomo mucho tiempo. Nota: Se puede hacer esto un archivo .httpaccess. Sin embargo no logre hacerlo funcionar por eso prefiero dejarlo como un nota (De que en teoría es posible).


En el archivo de configuración de apache (httpd.conf)

Buscamos la línea:

AddType application/x-httpd-php

Y le agregamos al final .htm y .html

Quedando algo asi como:

AddType application/x-httpd-php .htm .html

Esto es muy útil por razones de seguridad. Escondiendo en que esta programado la aplicación porque en el browser se vera simplemente .html en los scripts que en realidad son php. Pienso que es una excelente practica de configuración del los servidores.

Cuarto Truco.

Los virtual host, las configuración https y el /etc/hosts. Estos chicos pueden hacer una verdadera epifanía si no se sabe configurar bien. Hagamos algo básico y general. Los archivos hosts son archivos especializados dentro de los sistemas operativos (/etc/hosts para linux, unix y derivados) -> notese el s al final. Este archivo "simula" la llamada de un dominio remplazando por un ip previamente configurado.

Ejemplo:
127.0.0.1 koza.com

Si en el browser abro la dirección www.koza.com en realidad el archivo hosts se encarga de cargar mi servidor local.

Quinto Truco.

Los virtual Host son una noble invención, junto con el archivo host pueden hacer grandes hazanas.
Daremos por un hecho que existe en el archivo host la configuración anteriormente dada.

Entonces podemos construir de koza.com un mundo de reglas virtuales de nuestro sitio como:


        ServerName cruiser.koza.com
        UseCanonicalName Off
        DocumentRoot /home/sites/koza/htdocs/

    SetEnv SITE_LINK_URL http://www.google.com


En la configuracón arriba establecida le estamos diciendo al apache (Con ayuda del host file) que la proxima vez que alguien acceda a cruiser.koza.com su configuración personalizada va a usar Document Root en la carpeta /home/sites/koza/htdocs y que va a tener una variable de entorno personalizada llamada SITE_LINK_URL. Podemos hacer uso de esta en Php asi:

define("SITE_LINK_URL", $_SERVER["SITE_LINK_URL"]);

martes, 27 de septiembre de 2011

Upload de QPixmap a Php

Hoy tuve que enfrentarme a la tarea de subir una imagen desde un Programita en C++ a un Script en web de PHP.
Al inicio pensé que no seria complicado pero después de un rato me di cuenta que era la tarea era "infernal".
Mi primera opción fue usar CURL, pero despúes de varios intento fallidos me decline por QT.
Qt tiene una serie de clases para manejo de Network. Sin embargo la mayoría a quedado obsoleta dejando muy pocas en juego.
Al final me decidí por hacerlo con QNetworkAccessManager. Veamos código primero y despúes la explicación.

Prueba Conceptual:

Form en HTML

Enviar un nuevo archivo:

Codigo PHP para subir imagenes

$target_path = "uploads/";

$target_path = $target_path . basename( $_FILES['userfile']['name']); 

if(move_uploaded_file($_FILES['userfile']['tmp_name'], $target_path)) {
    echo "The file ".  basename( $_FILES['userfile']['name']). " has been uploaded";
} else{
    echo "There was an error uploading the file, please try again!";
}

Nota:
No mucho que explicar aca, un form que sube cualquier cosa. Esto se lo manda al PHP y lo salva en una carpeta de upload.

Ahora lo que intenso hacer es simular el request del browser con C++ con QT.

void UploadManager::upload(QString url, QPixmap img){
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
    connect(manager, SIGNAL(finished(QNetworkReply*)),
    this, SLOT(downloadFinished(QNetworkReply*)));
    QByteArray bytes;
    QBuffer buffer(&bytes);
    buffer.open(QIODevice::WriteOnly);
    img.save(&buffer, "PNG");
    QByteArray multipartform;
    QString crlf("\r\n");
    QString boundaryStr("---------------------------109074266748897678777839994");
    QString boundary="--"+boundaryStr+crlf;
    QString filename = "test.png";
    multipartform.append(boundary.toAscii());
    multipartform.append(QString("Content-Disposition: form-data; name=\"userfile\"; filename=\"" + filename + "\"" + crlf).toAscii());
    multipartform.append(QString("Content-Type: text/plain" + crlf + crlf).toAscii());
    multipartform.append(bytes);
    multipartform.append(QString(crlf + "--" + boundaryStr + "--" + crlf).toAscii());
    QNetworkRequest request;
    request.setUrl(QUrl(QString("http://127.0.0.1/PruebasConceptuales/upload/subearchivo.php")));
    request.setHeader(QNetworkRequest::ContentTypeHeader, "multipart/form-data; boundary=" + boundaryStr);
    manager->post(request, multipartform);
}

Explicación:

Básicamente, lo que hacemos es construir el Request que usa Firefox. Se sabe que cuando se va a subir una imagen el Archivo pasa por un proceso de Base64. Curiosamente el QPixmap simplemente lo convierto en un flujo de Bits (lineas 5 - 8). Y con eso basta para subir. Despúes seguidamente hacemos otro Array de Bits con el cual empezamos a meter todos los datos para simular el post (Lineas 8 -18). Creamos un QNetworkRequest y le decimos al QNetworkAccessManager que use el request y que le pase todos los datos con manager->post(request, multipartform);

Cualquier consulta no duden en comentar :P

domingo, 18 de septiembre de 2011

Eyeos -> Unable to search all data matching $transferObject from database

Todo empezó hablando con un compañero del trabajo que es tan entusiasta en programación y de tema en tema empezamos a "fachentiar" sobre las famosas cloud. Fue donde le comente un poco sobre este sistema (EyeOs). Es muy impresionante y open source. De hecho me encanta el Api. Es un engine muy curioso el que desarrollaron.

En la oficina yo uso KDE 4. El problema es que KDE viene por defecto con Mysql, dando problemas cuando tienes que usarlo para otra aplicación como WordPress o EyeOS. Para mayores detalles se puede acceder aca. En la instalación es sencillo, simplemente le establecemos el socket Unix de la siguiente forma:

:home/koza/.local/share/akonadi/socket-sabrina/mysql

Pero cuando tratas de crear una cuenta veras el siguiente problema:

Unable to search all data matching $transferObject from database

Esto se debe a un problema con la conexión a la base de datos de mysql.

Pero si yo veo el esquema de la base de datos con el GUI de mysql?
Si es verdad. La instalación se lleva a cabo de forma exitosa. Pero la instalación usa un código muy diferente al de la aplicación para su funcionamiento productivo. Los scripts de instalación son basicamente desechados una vez la aplicación esta configurada.

Entonces me puse a travesear el código. Muy claro, muy limpio, soy un fan de los desarrolladores de esta aplicación. En mi investigación el script GenericDao.php en el método getConnection esta la magia.
Se implemento usando la clase PDO. (Esto es algo generico de PHP para ecapsular las conexiones a las bases de datos). Entonces el truco es más sencillo de lo que creen. Basta simplemente con abrir settings.php. En la definición de la variable SQL_CONNECTIONSTRING hay que agregar la declaración del unix_socket al string de conexión.


define('SQL_CONNECTIONSTRING', 'mysql:host=localhost;dbname=eyeos;unix_socket=<Ubicación de socket>');

Este seria para mi caso:

define('SQL_CONNECTIONSTRING', 'mysql:host=localhost;dbname=eyeos;unix_socket=/home/koza/.local/share/akonadi/socket-sabrina/mysql.socket'); 

Espero les sirva. Cualquier consulta comenten :P

domingo, 11 de septiembre de 2011

Kubuntu, Php y Mysql

Me imagino que a muchos les ha pasado el siguente error:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld

Y de verdad que da mucha colera :P. Y si usamos sudo la cosa se pone peor. Lo que da mas chicha es que este error es muy típico para KDE.
Para ponerlos en contexto resulta que mysql ya viene por defecto en KDE. Lo usa el programita Akonadi. La verdad no voy a hablar mucho sobre el. Simplemente queria aclararlo. Entonces el peor error en KDE si quieres mysql para programar es teclear:

sudo apt-get install mysql

Porque entonces la cosa se enreda mas y el resultado sera dos mysql instalados y ninguno operacional. Entonces por favor NO LO HAGAS.

Lo que puedes hacer es usar la instancia que ya existe de Mysql que Akonadi necesita. Resulta que ya existe un socket por defecto. Es este amigo de aca.

/home/<USER>/.local/share/akonadi/socket-sabrina/mysql.socket


Entonces vamos a levantar el servicio de mysql con el siguente comando.

mysql --socket=/home/koza/.local/share/akonadi/socket-sabrina/mysql.socket

Nota: Recuerden dejar la terminal abierta, si la cierran despues de unos minutos el servicio bajara.

Ahora bien. Podemos hacer un script pequeñito para realizar la prueba.

//No se necesita poner la extencion .socket is se pone los (:) al inicio del path
$link = mysql_connect(':home/koza/.local/share/akonadi/socket-sabrina/mysql', 'koza', '');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);


Con eso debería bastar. 

Pero por si los fallos, acá esta un par de tips que se pueden usar:

Asegúrese de que Akonadi este funcionando. Puede usar el el programa "Configuracion de Akonadi". Y en la pestana de "Configuracion del servidor" bajar el servicio y volverlo a subir.

Si es un caso en el que da problemas de permitos. Lo que se puede hacer ir al archivo Httpd.conf del Apache y modificar la linea:

User nobody por User <USER>

AEM hablemos del arquetipo 11

Cuando creamos un proyecto con AEM. Siempre es importante saber que arquetipo estamos usando. Pues esto me determinara que source, herramien...