creo que el problema puede estar en las barras que utilizaste para indicar la ruta. En un ppio cuando lo inclui tambien me dio un error, sin embargo al cambiar la direccion de las barras funciono correctamente.
Igualmente, tene en cuenta que a partir de la version 2.0 de Toba se utiliza un esquema de autoload, por lo que no es estrictamente necesario que pongas los includes/requires al ppio del archivo.
No, che.
Por las dudas, le cambié la dirección de las barritas como me indicas, y se sigue colgando.
Dudé, te decía, porque en este mismo formulario -de prueba- tengo otro require con las barras para el otro lado, incluso mezcladas (para probar), y no tiene problemas. De hecho que es como tu dices en un entorno linux, pero en este caso, estoy probando en un entorno windows con toba 1.4.4
La verdad es que no hay muchas cosas para cambiar.
puntualmente cual es el error que te tira?, puede que de ahi saquemos mas informacion concreta que cualquier elucubracion que hagamos en el aire.
El resto de las operaciones te funcionan correctamente?.. la variable de entorno ‘TOBA_DIR’ esta seteada correctamente en el alias en toba.conf?
Hola Richard, yo se que abuso de tu paciencia.
No puedo ver el error php específico, ya que el toba, cuando hay un error php, solo cuelga la operación. Estuve intentando ver algun log con los errores de php, pero no tengo acceso y los muchachos que administran el servidor no están.
Te pongo tres lineas que tengo en la misma página:
La primera y la tercera, funcionan.
La que está comentada es la que da error. El resto de las operaciones funcionan bien.
Fijate, en el caso de la tercera, que lo único que hice fue ver si llega bien al destino levantando un php que estuviera más profundo, y no hay problemas.
Posiblemente no le esté gustando algo de lo que pasa dentro del PHPExcel.php
Voy a seguir investigando. Si se te ocurre algo, agradecido.
La realidad es que Toba no puede pasar por encima de PHP… en el caso de los Fatal Errors no tenemos forma de capturarlos, por otro lado siendo un servidor de desarrollo el mismo deberia estar configurado para que PHP muestre todos los errores por pantalla display_errors = On. Ya que no les brindan acceso a los logs de Apache, seria importante que al menos pudieras verlos por pantalla.
Te pongo tres lineas que tengo en la misma página:
Esto funciona bien, levanto el archivo con un ef_upload, y lo guardo en la carpeta temp del proyecto.
El drama aquí, es que no me permite abrirlo, me dice que está protegido o cifrado (intento de abrirlo desde el navegador de windows o con el excel)
Para seguir la prueba, copio manualmente el archivo desde su carpeta origen, a la temp del proyecto.
Ejecuto el siguiente código:
if(file_exists('temp/nomina.xls'))
echo('existe');
$objReader = new PHPExcel_Reader_Excel2007();
$objPHPExcel = $objReader->load('temp/nomina.xls');
El if me devuelve verdadero, el php encuentra el archivo
La creación del objeto $objReader se ejecuta bien.
La tercer sentencia, la carga del archivo y creación del objeto $objPHPExcel, se cuelga, o sea: da un error en php.
Si no le pongo el archivo o le pongo cualquier cosa, se cuelga pero informando que el archivo no existe.
Esto funciona bien, levanto el archivo con un ef_upload, y lo guardo en la carpeta temp del proyecto.
El drama aquí, es que no me permite abrirlo, me dice que está protegido o cifrado (intento de abrirlo desde el navegador de windows o con el excel)
Una consulta… verificaste que $datos[‘archivo’][‘error’] no tenga nada no?.. por si acaso se subio mal el archivo.
De todas maneras, si el archivo se subio bien… moverlo a otra carpeta no tiene porque generarle ningun inconveniente, eso es una llamada a sistema no es que se copia a mano… donde un warning podria romper el formato.
La otra es que este quedando lockeado por el web server, seria medio loco el caso… pero no es la primera vez que veo que el web server queda colgado en windows.
Pude entrar al log de errores, y me arroja el siguente error:
Pregunto si esa clase a la que se refiere tendría que buscarla e instalarla yo por mi cuenta, o si toba ya tiene ese asunto resuelto.
Yo no le encuentro el agujero al mate.
Por lo que vi en la pagina de PHP, supuestamente en versiones > 5.2.0 la libreria podria venir incluida… aunque aparentemente no esta del todo oficializada, por el momento esta en PECL.
Otra forma es instalarla por linea de comandos con PEAR, quizas sea mas directa esta forma, por desgracia PHPExcel no usa Zlib que es una extension estandar.
Bueno, colegas.
Después de 4 o 5 días de baile, he logrado desentrañar este asunto para leer un archivo excel desde el php.
El problema con la clase que trae el toba, es que está reducida. Le han eliminado un montón de clases que toba no utiliza.
Me percaté de esto buscando por internet y observando que hacian referencia a clases y métodos que no están en la carpeta de PHPExcel que provee toba.
Dada esta situación probé bajando la clase desde internet y creando dentro de la carpeta 3ros, una llamada miphpexcel donde puse la carpeta PHPExcel que bajé completa.
Luego, escribí lo siguiente y funciona:
(fuera de la clase de mi aplicación)
require_once toba_dir().‘/php/3ros/miphpExcel/PHPExcel/IOFactory.php’;
(dentro de la clase de mi aplicación)
/** Pruebas de lectura desde un archivo excel*/
$xls = toba::proyecto()->get_www_temp($datos['archivo']['name']); #--esto viene de un ef_upload
move_uploaded_file($datos['archivo']['tmp_name'], $xls['path']);
$objPHPExcel = PHPExcel_IOFactory::load($xls['path']);
ei_arbol($objPHPExcel->getSheetCount());
$objPHPExcel->setActiveSheetIndex(0);
$valor_celda=$objPHPExcel->getActiveSheet()->getCell("B2")->getValue();
echo("valor celda: ".$valor_celda);
Me muestra lo que tiene la celda. De allí a procesar todo un archivo, es cuestión de estudiar un poquito la clase y sus métodos.
Espero que sirva, y si puede mejorarse el acceso soy todo oidos.
Un cordial saludo a todos, y gracias a aquellos que dedicaron su tiempo a ayudarme en la búsqueda de la solución.
me alegro que lo hayas podido resolver, en gral con cada nueva version de Toba intentamos ir actualizando las librerias que usamos.
No solemos modificar las librerias, salvo para remover algun archivo señalado explicitamente por el autor como desechable o en algun caso dejar solo los lenguajes mas utilizados por aqui.
Por eso me llama la atencion que te falten archivos, tenes la Working Copy de toba correcta?, hemos sufrido casos de actualizaciones falsas.
De todas formas, si hiciste una lista de los archivos faltantes me la podrias pasar? te lo agradeceria, asi voy verificando y restaurando aquellos que no esten efectivamente en dicha version.
Con respecto al error, por lo que pude ver al momento de hacer el load se hace una llamada a $excel->setActiveSheetIndex(0); (linea 1518), estimo que esa es la llamada que te esta fallando.
Lo mas loco es que por defecto se esta creando una hoja cuando el excel resultante no tiene nada, es decir… en teoria no deberia fallar nunca esa llamada.
Me intriga tu caso, cual es el error especifico que te tira?.
Asumo que estas en la version 2.1 de Toba no?
Hola Richard. Estás en lo cierto, esa es la llamada que falta, y ese es el error que me arroja. Algo completamente surrealista.
Esta tarde armo la lista, y te la mando. Pero, a titulo de anticipo, el php que contiene la clase que uso en el ejemplo de la solución, es uno de ellos.
Comparto finalmente como subir los datos de un archivo de excel, a un cuadro de toba:
Con la libreria phpExcel que viene con toba tenemos
copiar el archivo en el www/temp del proyecto
Para llenar el cuadro llamamos la siguiente función
function get_celdas() {
//ejemplo http://bayu.freelancer.web.id/2010/07/16/phpexcel-advanced-read-write-excel-made-simple/
require_once toba_dir().‘/php/3ros/phpExcel/PHPExcel.php’;
$datos = array();
$objPHPExcel = new PHPExcel();
$objReader = new PHPExcel_Reader_Excel5();
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load(‘temp/libro.xls’);
$rowIterator = $objPHPExcel->getActiveSheet()->getRowIterator();
$array_data = array();
foreach($rowIterator as $row){
echo "fila ".$row->getRowIndex ();
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false); // Loop all cells, even if it is not set
if(1 == $row->getRowIndex ()) continue; //skip first row la del encabezado
$rowIndex = $row->getRowIndex ();
$array_data[$rowIndex] = array(‘A’=>‘’, ‘B’=>‘’,‘C’=>‘’,‘D’=>‘’);