Ver Mensaje Individual
  #5 (permalink)  
Antiguo 04/03/2009, 20:00
Avatar de temaqueja
temaqueja
 
Fecha de Ingreso: agosto-2002
Ubicación: /dev/null/
Mensajes: 399
Antigüedad: 21 años, 8 meses
Puntos: 4
Respuesta: PHP y Tablas DBF

Por experiencia propia te digo que php (o la libreria dbf) en windows no deja acceder a archivo .dbf que estan en otra PC ni a traves de rutas tipo \\maquina\carpeta\archiv.dbf ni con unidades asignadas (hasta donde entiendo es algo de que el usuario utilizado por php no tiene esos permisos en windows).

Lo que me lleva a la otra hipótesis: Quiza el tema sea por los permisos en windows o en linux. Recuerda que apache y php no se ejecutan con tu propio usuario.

Solo por probar: deja una copia del dbf en una carpeta muy accesible (en windows seria la carpeta de localhost y en linux seria esa o /tmp) y ve si puedes acceder al archivo en esa locación. Antes de intentar la conexión usa la funcion if(file_exists($ruta.$tabla)){ ... }

Aca te dejo un ejemplo de como conectar usando usando ODBC y un dsn "DE SISTEMA"

Código PHP:
// consulta SQL a nuestra tabla 

$sql="SELECT * FROM facturas WHERE ((fecha>={ts '2007-01-01 00:00:00'}) and ".
     
"((ret_mn_cr>0) or ((retencion>0) and (fecha>={ts '2007-09-11 00:00:00'}))) ".
     
") ORDER BY fecha, serfact, factura; ";

// Conectar 
$dsn "nombredelDSNdeSISTEMA";
$cid=odbc_connect($dsn$usuario$clave);

if (!
$cid){
    exit(
"<strong>Error tratando de conectar con el origen de datos.</strong>");
}    

// generamos la tabla 
@$result=odbc_exec($cid,$sql);
if(
$result) {

  
// Cargar a un array ...
  
while($dat odbc_fetch_row($result)) {
    
$datos[] = array(
      
"factura" => odbc_result($result,'serfact').'-'.odbc_result($result,'factura'),  
      
"cliente" => odbc_result($result,'cliente'),
      
"moneda" => odbc_result($result,'moneda'),
      
"total" => odbc_result($result,'total')+0
    
);
        
//depurar te puede servir para ver los tipos::: echo ">>".odbc_result($result,'ret_mn_cr').">".gettype(odbc_result($result,'ret_mn_cr'));

  
}
  
odbc_close($cid);
} else {
  if(
odbc_error()=='S1000') {
    echo 
"<b>ERROR:</b> La tabla de facturas está bloqueada en exclusividad por un ".
         
"proceso del Sistema, por favor espere o notifique al usuario que está ".
         
"llevando a cabo ese proceso.";
  } else {
    echo 
"<b>ERROR: Por favor imprima esta página para soporte informático!</b> <br/>".
         
"Codigo: ".odbc_error()." - Mensaje: ".odbc_errormsg($cid)."<br/>".
         
"SQL: ".$sql."<br/>";
  }

__________________
_________________________
La computadora nació para resolver problemas que antes no existían