Saltar al contenido

Cambiar la conexión:

function db_conectar()
{
 $db = mysqli_connect($GLOBALS['configuration']['host'],$GLOBALS['configuration']['user'],$GLOBALS['configuration']['pass'],$GLOBALS['configuration']['db']);
 
if (!$db) {
 echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
 echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL;
 echo "error de depuración: " . mysqli_connect_error() . PHP_EOL;
 exit;
 }
 else {return $db;}
}

Solo he tenido que hacer un replace con:

mysql_query(    ---------------->   mysqli_query($db,
mysql_num_rows( ---------------->    mysqli_num_rows(
mysql_fetch_array(  ---------------->   mysqli_fetch_array(
mysql_free_result(  ---------------->   mysqli_free_result(
MYSQL_ASSOC  ---------------->   MYSQLI_ASSOC
mysql_result(  ---------------->   mysqli_result(
mysql_real_escape_string( ------> mysqli_real_escape_string($db,

Otro de los ajustes que me he encontrado a la hora de la migración entre servidores con distintas versiones de PHP es el siguiente mensaje:

Strict Standards: mktime(): You should be using the time() function instead in xxxxxxx.php on line xx

El problema viene por la función mktime() y resolverlo es sencillo, ya que solo se deberá sustituir por la función time()

Inicialmente, la función mktime tiene los siguientes argumentos:

int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )

A partir de PHP 5.1 se utiliza la función time() y no se pasan argumentos para diferenciarla.

Muchas veces tenemos problemas de seguridad en nuestras páginas webs, es altamente recomendable tener preparadas tareas automáticas para que se ejecuten y salven los datos cada cierto tiempo. Con el siguiente script realizamos una copia de las tablas que deseamos exceptuando los nombres de las que pasamos como parámetro, en mi caso los logs no los copio.

Backup

backup_tables('servidor','usuario','contrasena','bd','tabla1,tabla2');
 
function backup_tables($host,$user,$pass,$name,$tablesNo)
 {
 $link = mysql_connect($host,$user,$pass);
 mysql_select_db($name,$link);
 
//get all of the tables
 $tables = array();
 $tablesNoBackup = explode(',',$tablesNo);
 
$result = mysql_query('SHOW TABLES');
 while($row = @mysql_fetch_row($result))
 {
 $tables[] = $row[0];
 }
 
//cycle through
 foreach($tables as $table)
 {
 if(!in_array($table, $tablesNoBackup))
 {
 $result = mysql_query('SELECT * FROM '.$table);
 $num_fields = mysql_num_fields($result);
 
$return.= 'DROP TABLE '.$table.';';
 $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
 $return.= "\n\n".$row2[1].";\n\n";
 
for ($i = 0; $i < $num_fields; $i++)
 {
 while($row = mysql_fetch_row($result))
 {
 $return.= 'INSERT INTO '.$table.' VALUES(';
 for($j=0; $j<$num_fields; $j++)
 {
 $row[$j] = addslashes($row[$j]);
 $row[$j] = ereg_replace("\n","\\n",$row[$j]);
 if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
 if ($j<($num_fields-1)) { $return.= ','; } } $return.= ");\n"; } } $return.="\n\n\n"; } } //save file $handle = fopen('db-backup-'.date("Ymd").'-'.(md5(implode(',',$tables))).'.sql','w+'); fwrite($handle,$return); fclose($handle); }

Cuando  hacemos un test en Google PageSpeed Insights y nos da como una mejora que debes introducir "Especificar cache del navegador", nos da la siguiente explicación:

https://developers.google.com/speed/docs/insights/LeverageBrowserCaching

Captura

 

 

En realidad lo que nos quiere decir es que para mejorar la experiencia de usuario a la hora de cargar la web, el contenido estático como imágenes, hojas de estilo y javascript le podemos indicar una fecha de expiración para que no se cargue cada vez que el usuario accede a la página. Esto se puede hacer muy fácilmente, hay dos opciones, desde PHP o desde .htacces. La primera opción te va permitir decir que páginas quieres que se aplique, en la segunda y más recomendable se aplicará a todo el conjunto de páginas.

Aunque se puede expresar la directiva de tiempo con palabras tipo days, week, moth a mi me gusta más la forma numérica y expresarlo en segundos, de esta forma se calcula así:

- ExpiresDefault A3600 una hora
- ExpiresDefault A604800 para una semana

Y se calcula de la siguiente forma: 30 dias = 60*60*24*30 = 2592000

Expiración utilizando .htacces

<ifmodule mod_expires.c>
 ExpiresActive On
 ExpiresDefault A3600
 <FilesMatch ".(gif|jpg|jpeg|png|swf)$">
 ExpiresDefault A604800
 Header append Cache-Control "public"
 </FilesMatch>
 <FilesMatch ".(xml|txt|html)$">
 ExpiresDefault A604800
 Header append Cache-Control "public"
 </FilesMatch>
 <FilesMatch ".(js|css)$">
 ExpiresDefault A604800
 Header append Cache-Control "public"
 </FilesMatch>
</ifmodule>

Expiración utilizando PHP

Se realizará modificando los headers

header("Expires: ".gmdate ("D, d M Y H:i:s", time() + 60*60*24*30)." GMT");

En las siguientes referencias os dejo otras explicaciones útiles:

 

Se llaman CronJobs o Cron (en CPANEL CronJobs)

en Comando pones:

php /home/sitio/public_html/rutina.php

Esto ejecutará una página de php (o script) cada cierto tiempo que selecciones.

Hay varios valores predefinidos que se pueden utilizar para sustituir la expresión CRON.

Entrada Descripción Equivale A
@yearly Se ejecuta una vez al año 0 0 1 1 *
@annually (igual que @yearly) 0 0 1 1 *
@monthly Se ejecuta una vez al mes 0 0 1 * *
@weekly Se ejecuta una vez a la semana 0 0 * * 0
@daily Se ejecuta una vez al día 0 0 * * *
@midnight (igual que @daily) 0 0 * * *
@hourly Se ejecuta una vez cada hora 0 * * * *

 

Captura

Describa su contenido

Una URL es una URL obvio grande. Si un usuario puede ver en la barra de direcciones (o un enlace pegado) y hacer una estimación precisa sobre el contenido de la página antes de llegar alguna vez, has hecho tu trabajo. Estas direcciones URL se pegan en la residencia, correo electrónico, por escrito, y sí, incluso reconocido por los motores.

Que sea corto
Recuerde siempre, la brevedad es una virtud. Cuanto más corta sea la URL, más fácil copiar y pegar, leer por teléfono, escribir en una tarjeta de visita, o la utilización en un centenar de maneras poco ortodoxas otros, todos los cuales significar una mejor usabilidad y marca mayor.
Static es el Camino y la Luz
No para introducir la religión en esto, pero te puedo decir con certeza que algunos de los motores absolutamente tratan URLs estáticas diferente a las dinámicas. Y ningún hombre le gusta una URL donde los grandes jugadores son "?", "&" Y "=".
Descriptivos son mejores que los números
Si usted está pensando en usar 114/cat223 /, ir con / marca / adidas / lugar. Incluso si el descriptivo no es una palabra clave o particularmente informativa para un usuario no iniciado, es mucho mejor usar las palabras cuando sea posible. Si nada más, integrantes de su grupo gracias por hacer que sea mucho más fácil a los problemas de identificación en el desarrollo y pruebas.
Palabras no hace daño
Si usted sabe que usted va a tener como objetivo un montón de frases de palabras clave competitivas en su sitio web para el tráfico de búsqueda, usted querrá todas las ventajas que puede obtener. Las palabras clave son sin duda uno de los elementos de esa estrategia, así que la lista de marketing, asignarla a las páginas adecuadas, y ponerse a trabajar. Para las páginas creadas dinámicamente a través de un CMS, crear la opción de incluir palabras clave en la URL.

Los subdominios no son la respuesta
En primer lugar, nunca utilice varios subdominios (por ejemplo, siteexplorer.search.yahoo.com) - es innecesariamente complejo y prolongado. En segundo lugar, consideramos que los subdominios tienen el potencial de ser tratada por separado del dominio principal cuando se trata de pasar enlace y el valor de confianza. En la mayoría de los casos en que sólo unos pocos subdominios se utilizan y no hay interconexión bueno, no le hará daño, pero no me gustaría tomar la oportunidad. Para mí, los beneficios derivados de la gestión de la reputación (por las inundaciones de las SERPs con sus subdominios) son mínimos en comparación con la pérdida potencial de enlace / jugo de confianza. También creo que las adquisiciones subdominio de SERPs no es algo que los motores de búsqueda ven como beneficioso para sus usuarios y se puede cerrar en cualquier momento. Afortunadamente, si usted lo está haciendo ahora, siempre puedes hacer 301 para el dominio principal.
Menos Carpetas
Una URL no debe contener carpetas innecesarias (o palabras o caracteres para el caso), por la misma razón que los pantalones de un hombre no debe contener pliegues innecesarios. La tela adicional es inútil y reducirá su probabilidad de impresionar a posibles compañeros.
Guiones Separe Mejor
Al crear direcciones URL con varias palabras en el formato de una frase, guiones son los mejores para separar los términos (por ejemplo, / marcas / dolce-y-gabbana /), seguido (en orden) por, guiones bajos (_), puntos positivos (+) y nada.
Seguir con los convenios
Si su sitio utiliza un formato único en todo, no considera hacer una sección única. Se adhieren a las directrices de su URL, una vez establecidos, por lo que los usuarios (y futuros desarrolladores) tendrá una idea clara de cómo se organiza el contenido en carpetas y páginas. Esto se puede aplicar a nivel mundial y para los sitios que compartir plataformas, marcas, etc Re-inventar la rueda en situaciones en las que la dependencia de convención hace que las tareas más fácil de todos es una locura.
No seas mayúsculas y minúsculas
Desde URLs pueden aceptar los dos caracteres en mayúsculas y minúsculas, nunca, nunca permita que las letras mayúsculas en su estructura. Si los tiene ahora, 301 a todo minúsculas versiones para evitar confusiones. Si usted tiene un montón de tráfico type-in, incluso se podría considerar una regla 301 que envía cualquier uso incorrecto de mayúsculas permutación a su legítimo hogar.
No Anexar datos extraños
No tiene sentido tener un URL que existen en la eliminación de personajes genera el mismo contenido. Usted puede estar prácticamente seguro de que la gente en la web lo encontrará, vincular a usted de manera distinta, confundir a ellos mismos, sus lectores y los motores de búsqueda (con problemas de contenido duplicado), y luego se quejan de ello.

 

Texto original (inglés):  http://www.seomoz.org/blog/11-best-practices-for-urls

2

La necesidad surge de un cliente al que la web le iba lenta. Era porque disponía de archivo muy pesados y la carga estaba complicando la navegabilidad de la web.

Con este pequeño script en php se recorre los archivos del directorio, detecta si son de tamaño grande y si es así se redimensiona, en este caso a 600 x 400px.

<? 
# establecer limite de tiempo máx ejecutandose
set_time_limit(200);
## CONFIGURACION #############################

 $ancho_nuevo=600; 
 $alto_nuevo=400; 
 
 # directorio
 $path="/directorio/articulos";
 $path2="/directorio2/articulos2";
 
## FIN CONFIGURACION ############################# 

$directorio=dir($path);
$items = 0; 
 
echo "Directorio ".$path.":<br><br>";
 
while ($archivo = $directorio->read())
{
 if($archivo != "." && $archivo != "..")
 {
 $ruta1 = $path.'/'.$archivo;
 $ruta2 = $path2.'/'.$archivo;
 $ancho = $ancho_nuevo;
 $alto =$alto_nuevo;
 
 $datos=getimagesize ($ruta1); 
 
 $ancho_orig = $datos[0]; # Anchura de la imagen original 
 $alto_orig = $datos[1]; # Altura de la imagen original 
 $tipo = $datos[2]; 
 
 
 //echo "<br>Ancho nuevo: " . $ancho;
 //echo "<br>Ancho orig: " . $ancho_orig;
 //echo "<br>Alto nuevo: " . $alto;
 //echo "<br>Alto orig: " . $alto_orig;
 
 if($ancho < $ancho_orig || $alto < $alto_orig)
 {
 echo "<br>Archivo: " .$ruta1;
 echo "<br>Archivo destina: " .$ruta2;
 
 
 if ($tipo==1){ # GIF 
 if (function_exists("imagecreatefromgif")) 
 $img = imagecreatefromgif($ruta1); 
 else 
 echo "No function GIF"; 
 } 
 else if ($tipo==2){ # JPG 
 if (function_exists("imagecreatefromjpeg")) 
 $img = imagecreatefromjpeg($ruta1); 
 else 
 echo "No function JPG"; 
 } 
 else if ($tipo==3){ # PNG 
 if (function_exists("imagecreatefrompng")) 
 $img = imagecreatefrompng($ruta1); 
 else 
 echo "No function PNG"; 
 } 
 
 # Se calculan las nuevas dimensiones de la imagen 
 if ($ancho_orig>$alto_orig) 
 { 
 $ancho_dest=$ancho; 
 $alto_dest=($ancho_dest/$ancho_orig)*$alto_orig; 
 } 
 else 
 { 
 $alto_dest=$alto; 
 $ancho_dest=($alto_dest/$alto_orig)*$ancho_orig; 
 }
 
// imagecreatetruecolor, solo estan en G.D. 2.0.1 con PHP 4.0.6+ 
$img2=@imagecreatetruecolor($ancho_dest,$alto_dest) or $img2=imagecreate($ancho_dest,$alto_dest);
 
// Redimensionar 
// imagecopyresampled, solo estan en G.D. 2.0.1 con PHP 4.0.6+ 
@imagecopyresampled($img2,$img,0,0,0,0,$ancho_dest,$alto_dest,$ancho_orig,$alto_orig) or imagecopyresized($img2,$img,0,0,0,0,$ancho_dest,$alto_dest,$ancho_orig,$alto_orig);
 
// Crear fichero nuevo, según extensión. 
 if ($tipo==1) // GIF 
 if (function_exists("imagegif")) 
 imagegif($img2, $ruta2); 
 else 
 echo "No GIF";
if ($tipo==2) // JPG 
 if (function_exists("imagejpeg")) 
 imagejpeg($img2, $ruta2); 
 else 
 echo "No JPG";
if ($tipo==3) // PNG 
 if (function_exists("imagepng")) 
 imagepng($img2, $ruta2); 
 else 
 echo "No PNG¡"; 
 }
 
 unlink($ruta1);
 $items ++;
 } 
}
echo "<br>Total items: ". $items;
$directorio->close();
?>

Para redireccionar la URL de un sitio desde sin www a www se debera insertar las siguientes líneas en nuestro archivo .htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www.midominio.com$ [NC]
RewriteRule ^(.*)$ http://www.midominio.com/$1 [L,R=301]

De esta forma cuando ingresemos a midominio.com automáticamente se redireccionará a www.midominio.com

Muy fácil, con la función number_format: http://php.net/manual/es/function.number-format.php

echo number_format(123456789, 0, '', '.'); 
// Imprime 123.456.789

2

El otro día me descargue una versión nueva del Xampp y cuando fui a ver mis páginas... ZAS¡¡¡ que susto no iba ninguna, el Apache escupía el código Php como si fuera HTML.... me di cuenta que era por los tags que se emplean para abrir y cerrar los scripts de PHP.

Podemos solucionarlo accediendo al php.ini y colocando short_open_tag=On
de tal forma que si usas < ?php, aunque siempre tenemos algún script que se olvida.