DANIEL MAZA

Página Personal

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.

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.

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. Para hacer efectiva la eliminación física, podemos implementar el siguiente método Regenerar(), el cual crea un archivo temporal para guardar los registros no marcados como eliminados, luego elimina el archivo original volviendolo a restaurar renombrando el archivo temporal.

public void Regenerar() throws IOException
{
        File ArchivoTemp=new File("temporal.tmp");
        ManejoObj FlujoTemp=new ManejoObj(ArchivoTemp);
        CProducto Obj;
        for(int reg_i = 0; reg_i < nregs; reg_i++)
        {
            Obj = this.ValorEn(reg_i);
            if(Obj.getCodigo().compareTo("") != 0)
               FlujoTemp.Añadir(Obj);
        }
        this.Cerrar();
        FlujoTemp.Cerrar();
        ArchivoActual.delete();
        if(!ArchivoTemp.renameTo(ArchivoActual))
            throw new IOException("No se actualizo el archivo");
}

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);
    }
}

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;
    }
}