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

jueves, 26 de octubre de 2017

Redirect http to https on PHP with Heroku using .htaccess


There is one thing that you need to understand with SSL and Heroku. The SSL connection is actually terminated before the request reaches your app, it is done heroku routing layer and all requests are sent to your app using plain HTTP.

To know if a request was made using HTTPS you need to check the X-Forwarded-Proto HTTP header for its value. "https" means it used SSL, "http" means it didn't. You should then perform the URL rewrite based on this. This is an example of how you can do this using the .htaccess file.

##Force SSL

#Normal way (in case you need to deploy to NON-heroku)
RewriteCond %{HTTPS} !=on

#Heroku way
RewriteCond %{HTTP:X-Forwarded-Proto} !https

#If neither above conditions are met, redirect to https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


The secret sauce is the line with HTTP:X-Forwarded-Proto.


links:
https://devcenter.heroku.com/articles/http-routing
https://stackoverflow.com/questions/26489519/how-to-redirect-to-https-with-htaccess-on-heroku-cedar-stack

lunes, 15 de agosto de 2016

Si programas tienes que usar una guia de estilos para tu codigo...

Si actualmente estas programando y no estas usando una guía de estilo para tu código de acuerdo al lenguaje que usas,  estas cometiendo un gran error...

Una guía de estilo de código en palabras simples es como tu código luce , como lo ven los demás. Si miras todo el código que has escrito hasta ahora podrás notar un cierto patrón, ese es tu propio estilo.
El problema con esto es que no es entandar y la mayoría de las veces solo tu podrás entenderlo.

No serial genial que todos escribieran el código como tu lo haces ?  .... Por esa razón mi buen amigo es que existen las guía de estilo de código, para que todos podamos leer y entender el código de los demás.

Una guía de estilo de código por lo general tiene lo siguiente:

  • Como y cuando usar comentarios
  • Como usar y cuanto espacio e indentación deberías de utilizar
  • Nombres adecuados para tus variables y funciones
  • Como agrupar tu código
  • Que técnicas usar o cuales no, dependiendo del lenguaje
Si tu objetivo es trabajar en una gran empresa, necesitas aprender los estilos de código para cada lenguaje que usas. Es un gran dolor de cabeza cuando un nuevo programador quiere escribir código a como le da la gana, Si tu eres uno de estos seguramente no vas a durar mucho.

Una rápida búsqueda en Google puede ayudarte a encontrar los estilos que buscas, pero a continuación podre algunos





martes, 18 de febrero de 2014

Error Wampserver 2.4 no corre correctamente

Algunas veces cuando instalas Wampserver te encuentras que el servidor no levanta correctamente y su icono no  pasa del color amarillo. Para saber realmente en que modulo esta ocurriendo el problema necesitamos hacer lo siguiente:

 Click izquierdo en el icono de wampserver para ver el menu  > apache > Service , y ver si el servicio esta corriendo correctamente. Si no es asi y esta detenido tenemos que ver los apache logs que estan en el mismo menu y veras una lista de errores que puedes consultar con Google.

Otro problema comun es que alguna aplicacion esta usando el puerto 80, que es el mismo que usa wampserver , en este caso lo puedes probar usar la opcion : "Test port 80" en el mismo menu de apache >service

Ahora hacemos el mismo proceso con mysql,  Click izquierdo en el icono de wampserver para ver el menu  > service > Service , y ver si el servicio esta corriendo correctamente. Si no es asi y esta detenido tenemos que ver los mysql logs que estan en el mismo menu .

En el siguiente ejemplo yo estoy recibiendo el siguiente error en mis mysql logs: 

2014-02-18 09:21:24 13472 [Note] Plugin 'FEDERATED' is disabled.
2014-02-18 09:21:24 13472 [Note] InnoDB: The InnoDB memory heap is disabled
2014-02-18 09:21:24 13472 [Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions
2014-02-18 09:21:24 13472 [Note] InnoDB: Compressed tables use zlib 1.2.3
2014-02-18 09:21:24 13472 [Note] InnoDB: Not using CPU crc32 instructions
2014-02-18 09:21:24 13472 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2014-02-18 09:21:24 13472 [Note] InnoDB: Completed initialization of buffer pool
2014-02-18 09:21:24 13472 [Note] InnoDB: Highest supported file format is Barracuda.
2014-02-18 09:21:24 13472 [Note] InnoDB: 128 rollback segment(s) are active.
2014-02-18 09:21:24 13472 [Note] InnoDB: Waiting for purge to start
2014-02-18 09:21:24 13472 [Note] InnoDB: 5.6.12 started; log sequence number 1625997
2014-02-18 09:21:24 13472 [Note] Server hostname (bind-address): '*'; port: 3306
2014-02-18 09:21:24 13472 [Note] IPv6 is available.
2014-02-18 09:21:24 13472 [Note]   - '::' resolves to '::';
2014-02-18 09:21:24 13472 [Note] Server socket created on IP: '::'.
2014-02-18 09:21:25 13472 [Note] Event Scheduler: Loaded 0 events
2014-02-18 09:21:25 13472 [Note] wampmysqld: ready for connections.
Version: '5.6.12-log'  socket: ''  port: 3306  MySQL Community Server (GPL)


Esto es debido al que tengo instalado el servicio IIS de windows.

Para resolver este problema existen muchas opciones que tienes que testear, las cuales puedes encontrar con una simple busqueda en Google. A continuacion dejare el link que a mi me ha ayudado a resolver el problema:

 http://forum.wampserver.com/read.php?2,73392

De forma general de todas las opciones que hablan, yo desactive IIS y cambie el puerto de wampserver a 8080.


jueves, 23 de enero de 2014

Crear una sesion en 2 dominos distintos con PHP y Curl no es posible (creo)


Siempre se da la ocasión que necesitas crear una sesión en una aplicación y al mismo tiempo tiene que crearse una sesión para el mismo usuario en otro sistema en otro dominio, porque de alguna manera comparten datos o cosas por el estilo.

Para hacer esto podemos hacer uso de http://enable-cors.org/ que permite comunicación entre dos dominios distintos. Otra forma de hacer esto es usando JSONP , que no es mas que un simple truco para superar las restricciones de "same domain policy" en peticiones Ajax.

Pero hoy quiero hablar de tratar de crear una sesión desde PHP usando Curl , Curl nos permite hacer peticiones a una URL desde PHP y recibir los datos en el mismo script. Lo lógico de pensar  es que si puedo hacer una petición desde PHP y enviar parámetros en la petición, entonces puedo enviar las credenciales del usuario al mismo tiempo para crear la sesión en 2 sistemas distintos.

Bueno en teoría si funciona, el script al que hagas la petición desde PHP recibirá los datos y responderá como se espera pero lo que no funciona es al momento de crear la sesión. Si tratas de crear la sesión usando JSONP enviando los datos en la query string funcionara perfectamente pero con Curl no funcionara.
El problema es con la identificación de la sesión, normalmente cuando tu inicias una sesión con PHP se crea un identificador único el cual luego es pasado a nuestro navegador en forma de cookie ó GET , ese identificador es guardado en el servidor y la próxima vez  que un script llama a  "session_start()" PHP verifica ese  identificador en el servidor, si lo encuentra entonces hay una sesión creada. En caso de no encontrar el identificador de la sesión PHP creara uno nuevo.

Entonces la petición Curl no puede recibir el identificador de la sesión que se creo en PHP , por lo tanto cuando visitas el sitio B  no existe el identificador en el servidor para tu navegador. Este comportamiento no pasa con JSONP.

Puedes hacer pruebas usando las funciones session_name() , session_id() de PHP y podrás comprobar que los identificadores de las sesión no son los mismos usando Curl en el sitio A y B.

He leído en algunas paginas que puedes pasar el identificador se sesion del sitio A al B en los parámetros para usar el mismo ID, pero no lo he llegado a comprobar no tengo idea de como hacerlo. No soy un experto en PHP si me he equivocado por favor corríjanme para poder aprender también.

He escrito esta entrada  por si alguna persona también tuvo la idea como yo de usar Curl para crear sesiones y no tiene idea de por que no funciona.



http://saulburgos.com/books/googlemaps.html



sábado, 9 de noviembre de 2013

Error PHP Warning: Cannot modify header information - headers already sent by

Como programador PHP en algún momento te habrás encontrado con este mensaje de error al momento de usar cookies ó haciendo una redirección con PHP  :

Warning: Cannot modify header information - headers already sent by

El problema con este error es que en algún lado de tu script php ya se ha enviado información sobre tu pagina web, por ejemplo con algún echo o algo asi. Estos casos son mas comunes cuando estas trabajando un en proyecto existente y no sabes por donde esta la linea de código que ha enviado información.

Para resolver este problema tiene que usar Output Buffering para evitar que se envie informacion al navegador antes de tiempo. Normalmente PHP  sin output buffering envia al navegador el codigo generado por tu script en pedazos, cada vez que encuentra un echo ó un print inmediatamente lo envia al navegador procesando asi todo tu script PHP. Pero con output buffering activado todo el codigo generado es guardado en una variable  hasta que todo el script PHP es leido y solo hasta después es enviado al navegador como una sola pieza.

Una ventaja de usar output buffering es que disminuye la cantidad de tiempo que toma mostrar una pagina por que no es enviada en pedazos.

Para ver un ejemplo sencillo de su uso, puedes visitar el siguiente link de Brian Cray donde tiene unos ejemplos muy buenos y mucha mas información sobre su uso.

Link : http://web.archive.org/web/20101216035343/http://dev-tips.com/featured/output-buffering-for-web-developers-a-beginners-guide

PHP manual : http://php.net/manual/en/function.ob-start.php




martes, 15 de octubre de 2013

PHP mostrar los mesajes de error del codigo

Algunas ocasiones cuando estas trabajando con PHP en un proyecto existente, te das cuenta que la aplicación no muestra ningún mensaje de error, aun cuando deliberadamente tu escribes mal algún método solo para ver si se muestra un error, y lo unico que obtienes es una pagina en blanco.

Esta pasa algunas veces por que en el servidor están desactivados los mensajes de error, lo cual es un problema  por que no podemos saber que nos esta causando el problema. Algunas veces para solucionar esto, es tan fácil  con solo agregar las siguientes lineas al inicio de tu script PHP :

error_reporting(E_ALL);

ini_set('display_errors', '1');



Pero algunas veces esto no funciona, cuando esto falla lo único que queda por hacer es crear un script PHP adicional por ejemplo llamado "first.php" que contenga las lineas anteriores de código, adicional a estas lineas haremos un "include" ó "requiere" con la ruta del script PHP donde creemos que esta el error. Entonces a través  de "first.php" vamos a acceder a nuestro script que tenemos que debuguear, de esta manera vamos a forzar a PHP a mostrar los errores en ese script que nos servirá de intermediario.

Esto pasa por que PHP necesita parsear el código antes de ejecutarlo y si existe algún error de parseo en mismo script donde estas definiendo la configuración para mostrar los errores, estos no se mostraran al momento que se encuentre un error. Por eso es recomendable dividir tu código en varias secciones y después incluirlos en un único script con "include" ó "requiere".

domingo, 29 de septiembre de 2013

Github y php : Hacer commit y push via Https


Este articulo lo escribo como experiencia que una vez tuve con un cliente, no estoy seguro que pueda funcionar para otras personas pero quiera publicarlo para que sea de ayuda para otras personas

Github es el popular servicio para alojar proyectos utilizando el sistema de control de versiones llamado Git. En esta parte quiero aclarar que Github y Git no son lo mismo, para entender un poco mas en detalle la diferencia puedes visitar este link

Hoy he tenido la oportunidad de trabajar en un proyecto donde un script PHP tiene que crear una serie de archivos, y esos archivos tienen que ser subidos automáticamente a un repositorio en Github. Quiero compartir la manera en que logre hacerlo, para que sirva de guía para otras personas. Tal vez no sea una de las  mejores técnicas pero logro obtener el resultado deseado, partiendo de esto puedes mejorar la técnica.

Lo primero que tenemos que hacer es  crear una cuenta en Github y crear un repositorio. Después con nuestro repositorio creado obtener la URL de mismo. Ejemplo:

https://github.com/SaulBurgos/temp.git.

Lo mas importante aquí es  primero verificar si en tu servidor web, tienes instalado Git. En esta sección no
puedo ofrecer mucha ayuda ya que puede variar según tu compañía de host. Pero a manera general puede ser descritos de esta manera:

  • Si tienes acceso a la terminal de tu servidor y puedes ejecutar comandos, pues solo tienes que seguir la guía de instalación en  http://git-scm.com/download/
  • Si no tienes acceso a la terminal, puedes consultar con tu proveedor de hosting de como instalar Git y te puedan dar acceso a la terminal para ejecutar comandos Git.
Lo siguiente es agregar nuestro repositorio Github a Git, donde haremos PUSH para enviar todo los archivos creados. Normalmente la configuración de un repositorio Github en Git seria asi:

git remote add 'origin' https://github.com/SaulBurgos/temp.git

De esta manera normalmente si hacemos push con el comando : 

 git push 'origin' master 

Nos preguntara el user y password y después subirá los archivos a Github. Pero como vamos a ejecutar comandos Git por medio de un script PHP necesitamos hacerlo un tanto diferente, para no tener que escribir el user y password.


 Lo primero es que vamos usar la autenticacion Github OAuth la cual nos permitirá hacer PUSH por medio de autenticacion HTTPS. Para esto necesitamos crear un "Personal Access Tokens" en nuestra  cuenta Github. Esto lo puedes hacer en settings > Applications > Personal Access Tokens.


Una vez que creas el tokens obtendrás algo como esto :

1912313134f10c7fghfghfhfhf506385f3877bedc1e

Este sera el token que usaremos para agregar nuestro repositorio Github a git usando esta estructura :

 "https://<OAuthToken>@github.com/username/application.git"

 La cual la nuestra quedaría de esta manera :

 https://1912313134f10c7fghfghfhfhf506385f3877bedc1e@github.com/SaulBurgos/temp.git

y nuestro comando Git para agregarlo  seria  :

git remote add 'github'  https://19686434f10c7fghfghfhfhf506385f3877bedc1e@github.com/SaulBurgos/temp.git

Con esto hemos terminado la configuracion de Git. Los comandos Git que utilizaremos en nuestro script PHP seran :
  •  git add -A
  • git commit
  • git push

Supongamos que hemos creado un repositorio Git y esta sera la estructura de nuestro proyecto :

/web/repo/   -> Aquí esta nuestro repositorio Git.(archivos a subir)
/web/script.php  -> Script PHP  que ejecutara los comandos Git.

La forma en que esto funciona es que el script PHP ejecutara comandos de terminal Git cuando se ejecute, así cualquier acción que queramos hacer con Git la haremos con PHP. Para ejecutar comandos de terminal con PHP usamos el método : exec. Ahora nuestro código PHP en el script sera este:

<?php
$pathRepo = __DIR__.'/repo';
chdir($pathRepo);  
exec("git add -A");
exec("git commit -m 'description del commit'");
exec("git push 'github' master --progress 2>&1");
?>
Ahora con solo estas linea de codido, cada vez que nuestro script se ejecute hara COMMIT y PUSH hacia Github, con los archivos que se encuentran en /web/repo/ sin pedir credenciales ya que estamos usando nuestro token OAuth. A cada uno de estos comando puedes hacerles un echo para ver los mensajes que devuelven. El método PHP chdir nos cambia de directorio para poder trabajar en la carpeta del repositorio.
Si lo prefieres puedes usar esta libreria para trabajar de una manera mas comoda : https://github.com/ornicar/php-git-repo , pero de antemano les advierto que no la he probado a fondo.

jueves, 13 de septiembre de 2012

miércoles, 12 de septiembre de 2012

Que lenguaje de programacion aprender?

He encontrado un bonito video donde se comparan los actuales lenguajes de programcion , para los que esten indecisos en que lenguaje aprender tal vez este video les pueda ayudar .



Personalmente si no sabes programar ninguno recomiendo que comenzar con python , es un lenguaje que le esta pisando los talones a php y creo que en unos años lo vencera , yo tengo pensado aprender cuando tenga un poco de tiempo.

martes, 22 de mayo de 2012

PHP le hace frente a Node.js con React NodePHP

Bueno esto si esta muy interesante , pues parece que los tipos de php no se dejan ganar terreno por Node.js  y aqui esta la respuesta de la comunidad PHP frente a Node.js

Se llama React PHP la verdad que viendo el codigo de la pagina oficial  es parecido al node hablando esctructuralmente , tiene callback , y un listener para el server .Yo hace poco me termine de leer un libro sobre Node.js me dejo con un mal sabor de boca , sera por el libro que no tenia muchos ejemplos practicos y se mantuvo enfocado a familiarizarme con Node.js y su funcionamiento cosa que comprendi pero necesito mas informacion y ejemplos de como desarrollar aplicacion web a como lo hago con PHP.

Apartir de Junio estan por salir nuevos libros de Node , espero poder conseguirlos y empezar de nuevo con el estudio , por ahora sigo mis proyecto con PHP y ZEND

les dejo el link para que lo vean link