Version warning: Imagick was compiled against Image Magick version 1654 but version 1650 is loaded. Imagick will run but may behave surprisingly in Unknown on line 0 [Solucionado]

Después de actualizar la versión de PHP a 7.4, apareció este error:

PHP Warning: Version warning: Imagick was compiled against Image Magick version 1654 but version 1650 is loaded. Imagick will run but may behave surprisingly in Unknown on line 0

Como estoy usando un hosting compartido, es imposible entrar en modo root y arreglarlo recompilando o cambiando la versión de Image Magick.

Mi proveedor dijo que era imposible cambiar la versión ya que los cambios afectarían al resto de cuentas clientes.

La solución

Sin embargo, hay una forma de detener la comprobación de la versión de Image Magick, y solo agregando en php.ini con la siguiente línea:

imagick.skip_version_check=true

Debe estar guardado en el nivel más alto posible del alojamiento. Esto evitará la comprobación de la versión de Image Magick.

Etiquetado: / / / / / / / / / /

Cómo eliminar JS:Clickjack-A/B [Trj] de un Sitio Web

Este es un problema que, hasta la fecha, solo es detectado en equipos que usan Avast Antivirus. El antivirus arroja una advertencia de página web infectada y luego es bloqueada para cualquier acceso.

El detalle de la infección es por JS:Clickjack-B [Trj].

Detalle de la Infección
Detalle de la Infección

El presente caso pasó con Joomla 2.5.11. en un primer momento pensé que era de un falso positivo del Avast; pues, revisando el sitio no encontré cambios en el registro (log). Seguir leyendo «Cómo eliminar JS:Clickjack-A/B [Trj] de un Sitio Web»

Solucionado: error 1146 while doing query Table ‘phplist_user_user’ doesn’t exist

Database error 1146 while doing query Table … PHPList

Este error de PHPList, me lo topé al instalarlo desde Fantastico DeLuxe.

Error PHPList
Error PHPList

 La solución es sencilla.. Seguir leyendo «Solucionado: error 1146 while doing query Table ‘phplist_user_user’ doesn’t exist»

Etiquetado: / / / / /

Error HTTP 500.0 – Internal Server Error en PHP sobre IIS7

Error HTTP 500.0 – Internal Server Error
No se puede mostrar la página. Error interno en el servidor.

Error detallado de IIS 7.5 - 500.0 - Internal Server Error
Error detallado de IIS 7.5 - 500.0 - Internal Server Error

¿Te topaste con este mismo error al probar tu página PHP sobre IIS7 o 7.5?

Todo iba bien, hasta que esta página de error me sacó de cuadro.

Después de revisar en todo internet y aplicar lo que recomendaban, no solucionó el problema.

Lo que causa el problema es simplemente por error de código en la página PHP, se produce un error en el código PHP y el IIS muestra ese mensaje, pero no especifíca la naturaleza del error para poder depurarlo.

Pero, ¿como habilitar las páginas tradicionales de error como si se tratara de un servidor Apache?

Simplemente debemos editar el php.ini y verificamos que la línea del display_errors esté en on, de la siguiente manera:

display_errors = On

Verifique que no esté antecedida del símbolo ; (punto y coma) sino se considera un comentario.

Espero les haya servido esta experiencia compartida.

Saludos.

Etiquetado: / / / / /

Problemas con phpMyAdmin en IIS 7

[Solucionado] Este post podría titularse: El famoso error de phpMyAdmin en IIS 7: #2002 El servidor MySQL no autorizó su ingreso.

Considero que este problema es muy común, sin embargo no está muy documentado.

¿Quién no ha trabajado con phpMyAdmin, de manera practica y sencilla?

Quise levantar PHP 5.3.3; MySQL 5.1.51-community y phpMyAdmin en IIS 7 sobre Windows 7 Professional.

Todo anduvo bien, excepto el phpMyAdmin, luego de colocar el usuario ya la contraseña, después de un largo tiempo sale:

Error phpMyAdmin #2002 El servidor MySQL no autorizó su ingreso
#2002 El servidor MySQL no autorizó su ingreso

Después de seguir tantas alternativas erroneas, la solución no pudo ser tan sencilla que basarse en la simple lógica de equivalencias de dirección IP y el localhost en la configuracion del config.inc.php, solamente hay que reemplazar ‘localhost’ por ‘127.0.0.1’ quedando la de esta manera:

$cfg['Servers'][$i]['host'] = '127.0.0.1';

Eso es todo.

Etiquetado: / / / /

Complementando la Clase ManejoObj (Archivos)

En el artículo anterior publiqué, a manera de ejemplo, la clase ManejoObj para ser utilizada en el manejo de archivos de acceso aleatorio con objetos.

En esa clase, existe un método llamado Eliminar(String Cod), el cual marca el registro como eliminado, sin procesar la eliminación física del archivo. Seguir leyendo «Complementando la Clase ManejoObj (Archivos)»

Etiquetado: / /

Clase para manipular Flujos (Archivos) en Java

La Clase ManejoObj, nos permitirá manejar los flujos y las acciones sobre los registros (con objetos) y archivos. Usa instancias de la Clase CProducto como estructuras de registros.

import java.io.*;
import javax.swing.*;

public class ManejoObj {
private RandomAccessFile FES; //flujo
private int nregs; //numero de registros
private int TamañoReg=140; //tamaño del registro en bytes
private File ArchivoActual;

public ManejoObj(File Archivo) throws IOException
{
if(Archivo.exists() && !Archivo.isFile())
throw new IOException(Archivo.getName() + "no es un Archivo Válido");
ArchivoActual=Archivo;
FES=new RandomAccessFile(Archivo,"rw");
nregs=(int)Math.ceil((double) FES.length()/(double)TamañoReg);
}
public void Cerrar() throws IOException {FES.close();}
public int NRegristros(){this.Mensaje(String.valueOf(nregs) + " registros"); return nregs; }

public boolean PonerValorEn(int i,CProducto Obj) throws IOException
{
if(i >= 0 && i <= nregs)
{
if(Obj.Tamaño() + 4 > TamañoReg)
this.Mensaje("Tamaño de registro Excedido");
else
{
FES.seek(i* TamañoReg);
FES.writeUTF(Obj.getCodigo());
FES.writeUTF(Obj.getDescripcion());
FES.writeFloat(Obj.getPrecio());
return true;
}
}
else
this.Mensaje("Número de registro fuera de limites");
return false;
}

public CProducto ValorEn(int i) throws IOException
{
if(i >= 0 && i < nregs)
{
FES.seek(i*TamañoReg);
String Cod=FES.readUTF();
String Des=FES.readUTF();
float Pre=FES.readFloat();

return new CProducto(Cod,Des,Pre);
}
else
{
this.Mensaje("Número de registro fuera de limites");
return null;
}
}

public void Añadir(CProducto Obj) throws IOException
{
if(PonerValorEn(nregs,Obj)) nregs++;
}

public boolean Eliminar(String Cod) throws IOException
{
CProducto Obj;
for(int reg_i = 0; reg_i < nregs; reg_i++)
{
Obj=this.ValorEn(reg_i);
if(Obj.getCodigo().compareToIgnoreCase(Cod)==0)
{
Obj.setCodigo("");
this.PonerValorEn(reg_i, Obj);
return true;
}
}
return false;
}

public int Buscar(String Str, int Pos) throws IOException
{
CProducto Obj;
String Cod;
if(Str == null) return -1;
if(Pos < 0) Pos = 0;
for(int reg_i = Pos; reg_i < nregs; reg_i++)
{
Obj = this.ValorEn(reg_i);
Cod = Obj.getCodigo();
if(Cod.indexOf(Str) > -1)
return reg_i;
}
return -1;
}
public void Mensaje(String msj)
{
JOptionPane.showMessageDialog(null, msj, "Mensaje al Usuario", JOptionPane.INFORMATION_MESSAGE);
}
}
Etiquetado: / /

Clase CProducto

Esta es la clase CProducto con la cual trabajaremos los objetos para la manipulación de registros sobre archivos.

import java.io.*;
/**
 * @author Daniel F
 */
public class CProducto implements Serializable {
    String Codigo;
    String Descripcion;
    float Precio;
    public CProducto(){}
    public CProducto(String C, String D, float P)
    {
        Codigo=C;
        Descripcion=D;
        Precio=P;
    }
    public void setCodigo(String Cod)
    {
        Codigo=Cod;
    }
    public void setDescripcion(String Des)
    {
        Descripcion=Des;
    }
    public void setPrecio(float Pre)
    {
        Precio=Pre;
    }
    public String getCodigo()
    {
        return Codigo;
    }
    public String getDescripcion()
    {
        return Descripcion;
    }
    public float getPrecio()
    {
        return Precio;
    }
    public int Tamaño()
    {
        return Codigo.length()*2+Descripcion.length()*2+4;
    }
}
Etiquetado: / /