Sì, tutto provato.
Utilizzati Internet explorer, Chrome e Firefox.
Ripeto, per il momento mi arrendo, alzo bandiera bianca.
Grazie per aver combattuto al mio fianco
Problemi Docebo in locale
Re: Problemi Docebo in locale
Buongiorno
vorrei contribuire a questa discussione, in quanto mi sto battendo con lo stesso problema. Anch'io ho installato Docebo 4.05 in locale, con Apache 2.2.16, PHP 5.2.14 e MySQL 5.1.57 (niente EasyPHP, XAMPP o simili). Il mio pc è un Win7 32bit, e la cartella HTDOCS di Apache si trova sul disco D. Ho fatto tutte le prove possibili, anche cercando di analizzare il codice per vedere dove si genera l'errore.
Non ho possibilità di capire il perché non funziona l'upload con modalità "FS", mentre ho qualche informazione in più per quanto riguarda l'upload "FTP".
Con la console del server FTP aperta, quando lancio l'upload di un file e/o di un oggetto scorm, vedo che Docebo fa correttamente il login sul server con i parametri impostati, ma si disconnette subito dopo, senza neanche TENTARE un qualsiasi upload, non vedo né PUT Né STORE né niente di simile nel log della sessione.
Ho naturalmente provato anche il server da un client normale, e tutto funziona regolarmente.
Io credo il problema risieda nella lib.upload.php, ma non ho sufficiente dimestichezza con il pattern MVC di Docebo per fare un debug efficace.
Spero questo possa aiutare VOI ad aiutare NOI.
vorrei contribuire a questa discussione, in quanto mi sto battendo con lo stesso problema. Anch'io ho installato Docebo 4.05 in locale, con Apache 2.2.16, PHP 5.2.14 e MySQL 5.1.57 (niente EasyPHP, XAMPP o simili). Il mio pc è un Win7 32bit, e la cartella HTDOCS di Apache si trova sul disco D. Ho fatto tutte le prove possibili, anche cercando di analizzare il codice per vedere dove si genera l'errore.
Non ho possibilità di capire il perché non funziona l'upload con modalità "FS", mentre ho qualche informazione in più per quanto riguarda l'upload "FTP".
Con la console del server FTP aperta, quando lancio l'upload di un file e/o di un oggetto scorm, vedo che Docebo fa correttamente il login sul server con i parametri impostati, ma si disconnette subito dopo, senza neanche TENTARE un qualsiasi upload, non vedo né PUT Né STORE né niente di simile nel log della sessione.
Ho naturalmente provato anche il server da un client normale, e tutto funziona regolarmente.
Io credo il problema risieda nella lib.upload.php, ma non ho sufficiente dimestichezza con il pattern MVC di Docebo per fare un debug efficace.
Spero questo possa aiutare VOI ad aiutare NOI.
Re: Problemi Docebo in locale
Buongiorno.
Sono riuscito a scoprire dove falliva il caricameno. Nella funzione "sl_upload" della libreria lib.upload.php, subito prima di richiamare le funzioni che fanno l'upload vero e proprio (sl_upload_ftp, sl_upload_fs e sl_upload_cgi) c'è un controllo sul mimetype del file che si sta caricando. Quel controllo, almeno sul mio ambiente, fallisce SEMPRE, quindi l'upload effettivo non viene neanche scatenato, e la procedura non funziona. Commentato quel controllo, l'upload funziona regolarmente in modalità FS. Per far funzionare la modalità FTP, ho dovuto prima mettere un comando "ftp_pasv($ftpConn, true)" per forzare la modalità passiva sul server, e poi commentare i comandi CHMOD che mi falliscono. Credo che i comandi CHMOD falliscano perché mi trovo su di un ambiente Windows, e l'impostazione standard del firewall mi costringa ad usare la modalità passiva.
Per quanto riguarda il controllo sul mimetype, vi posso dire che durante le mie prove è venuto fuori che Docebo tenta di usare la funzione mime_content_type, però questa non restituisce nessun valore. Di più non so dirvi.
Se volete, posso inviarvi il file da me "pasticciato", in modo che possiate testarlo meglio di quanto possa fare io.
Hope this help
Sono riuscito a scoprire dove falliva il caricameno. Nella funzione "sl_upload" della libreria lib.upload.php, subito prima di richiamare le funzioni che fanno l'upload vero e proprio (sl_upload_ftp, sl_upload_fs e sl_upload_cgi) c'è un controllo sul mimetype del file che si sta caricando. Quel controllo, almeno sul mio ambiente, fallisce SEMPRE, quindi l'upload effettivo non viene neanche scatenato, e la procedura non funziona. Commentato quel controllo, l'upload funziona regolarmente in modalità FS. Per far funzionare la modalità FTP, ho dovuto prima mettere un comando "ftp_pasv($ftpConn, true)" per forzare la modalità passiva sul server, e poi commentare i comandi CHMOD che mi falliscono. Credo che i comandi CHMOD falliscano perché mi trovo su di un ambiente Windows, e l'impostazione standard del firewall mi costringa ad usare la modalità passiva.
Per quanto riguarda il controllo sul mimetype, vi posso dire che durante le mie prove è venuto fuori che Docebo tenta di usare la funzione mime_content_type, però questa non restituisce nessun valore. Di più non so dirvi.
Se volete, posso inviarvi il file da me "pasticciato", in modo che possiate testarlo meglio di quanto possa fare io.
Hope this help
Re: Problemi Docebo in locale
Passa passa che ci diamo un'occhiataluca wrote: ...
Se volete, posso inviarvi il file da me "pasticciato", in modo che possiate testarlo meglio di quanto possa fare io.
Hope this help
Re: Problemi Docebo in locale
Non vedo modi per fare attach di file, vi copio tutto il contenuto del file <root>\docebo40\lib\lib.upload.php da me "pasticciato"alberto wrote:Passa passa che ci diamo un'occhiata
Code: Select all
<?php defined("IN_DOCEBO") or die('Direct access is forbidden.');
/* ======================================================================== \
| DOCEBO - The E-Learning Suite |
| |
| Copyright (c) 2008 (Docebo) |
| http://www.docebo.com |
| License http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt |
\ ======================================================================== */
/**
* @package admin-library
* @category File managment
* @author Emanuele Sandri <[email protected]>
* @version $Id: lib.upload.php 193 2006-03-31 07:31:01Z fabio $
*/
$ftpConn = NULL; // Chache for the last connection
function sl_open_fileoperations() {
$uploadType = Get::cfg('uploadType');
if( $uploadType == "ftp" ) {
return sl_open_fileoperations_ftp();
} elseif( $uploadType == "cgi" ) {
return TRUE;
} else {
return TRUE;
}
}
function sl_close_fileoperations() {
$uploadType = Get::cfg('uploadType');
if( $uploadType == "ftp" ) {
return sl_close_fileoperations_ftp();
} elseif( $uploadType == "cgi" ) {
return TRUE;
} else {
return TRUE;
}
}
function sl_mkdir( $path, $mode ) {
$uploadType = Get::cfg('uploadType');
if( $uploadType == "ftp" ) {
return sl_mkdir_ftp( $path, $mode );
} elseif( $uploadType == "cgi" ) {
return FALSE;
} else {
$result = mkdir( $GLOBALS['where_files_relative'].$path, $mode );
return $result;
}
}
function sl_fopen( $filename, $mode ) {
$uploadType = Get::cfg('uploadType');
$mfirst = $mode{0};
if( $uploadType == "ftp" && $mfirst != 'r' ) {
return sl_fopen_ftp( $filename, $mode );
} elseif( $uploadType == "cgi" ) {
return FALSE;
} else {
return fopen( $GLOBALS['where_files_relative'].$filename, $mode);
}
}
function sl_upload( $srcFile, $dstFile ) {
$uploadType = Get::cfg('uploadType');
// check if the mime type is allowed by the whitelist
// if the whitelist is empty all types are accepted
require_once(_lib_.'/lib.mimetype.php');
$upload_whitelist =Get::sett('file_upload_whitelist', 'zip,doc,xls,ppt,jpg,gif,png,txt,docx,pptx,xlsx,pdf');
$upload_whitelist_arr =explode(',', trim($upload_whitelist, ','));
if (!empty($upload_whitelist_arr)) {
$valid_ext = false;
$file_ext =strtolower(substr(strrchr($dstFile, "."), 1));
foreach ($upload_whitelist_arr as $k=>$v) { // remove extra spaces and set lower case
$ext =trim(strtolower($v));
$mt =mimetype($ext);
if ($mt) { $mimetype_arr[]=$mt; }
if ($ext == $file_ext) { $valid_ext =true; }
}
if (method_exists('finfo', 'file')) {
$finfo =new finfo(FILEINFO_MIME_TYPE);
$file_mime_type =$finfo->file($srcFile);
}
else {
$file_mime_type =mime_content_type($srcFile);
}
/*
if (!$valid_ext || !in_array($file_mime_type, $mimetype_arr)) {
ftp_exec ( $GLOBALS['ftpConn'], "STORISPONDENDOFALSE!!!!!!" );
return false;
}
*/
}
$dstFile =stripslashes($dstFile);
if( $uploadType == "ftp" ) {
return sl_upload_ftp( $srcFile, $dstFile );
} elseif( $uploadType == "cgi" ) {
return sl_upload_cgi( $srcFile, $dstFile );
} else {
return sl_upload_fs( $srcFile, $dstFile );
}
}
function sl_touch( $filename, $time ) {
$uploadType = Get::cfg('uploadType');
if( $uploadType == "ftp" ) {
return TRUE;
} elseif( $uploadType == "cgi" ) {
return TRUE;
} else {
return touch( $GLOBALS['where_files_relative'].$filename, $time );
}
}
function sl_is_file( $filename ) {
return @is_file($GLOBALS['where_files_relative'].$filename);
}
function sl_is_dir( $path ) {
return @is_dir($GLOBALS['where_files_relative'].$path);
}
function sl_is_readable( $filename ) {
return is_readable( $GLOBALS['where_files_relative'].$filename );
}
function sl_is_writeable( $filename ) {
return is_writeable( $GLOBALS['where_files_relative'].$filename );
}
function sl_filesize( $filename ) {
return filesize( $GLOBALS['where_files_relative'].$filename );
}
function sl_filemtime($filename ) {
return filemtime( $GLOBALS['where_files_relative'].$filename );
}
function sl_file_exists( $filename ) {
return file_exists( $GLOBALS['where_files_relative'].$filename );
}
function sl_chmod( $filename, $mode ) {
return chmod( $GLOBALS['where_files_relative'].$filename, $mode );
}
function sl_copy( $srcFile, $dstFile ) {
$uploadType = Get::cfg('uploadType');
if( $uploadType == "ftp" ) {
return sl_upload_ftp( $GLOBALS['where_files_relative'].$srcFile, $dstFile );
} elseif( $uploadType == "cgi" ) {
return sl_upload_cgi( $srcFile, $dstFile );
} else {
return copy($GLOBALS['where_files_relative'].$srcFile, $GLOBALS['where_files_relative'].$dstFile);
}
}
/** file system implementation **/
function sl_upload_fs( $srcFile, $dstFile ) {
$re = move_uploaded_file($srcFile, $GLOBALS['where_files_relative'].$dstFile);
if(!$re) die("Error on move_uploaded_file from: $srcFile to $dstFile");
return $re;
}
/**
* Copy a file, or recursively copy a folder and its contents
*
* @author Aidan Lister <[email protected]>
* @version 1.0.1
* @param string $source Source path
* @param string $dest Destination path
* @return bool Returns TRUE on success, FALSE on failure
*/
function sl_copyr($source, $dest)
{
// Simple copy for a file
if (is_file($GLOBALS['where_files_relative'].$source)) {
return sl_copy($source, $dest);
}
// Make destination directory
if (!is_dir($GLOBALS['where_files_relative'].$dest)) {
sl_mkdir($dest);
}
// Loop through the folder
$dir = dir($GLOBALS['where_files_relative'].$source);
while (false !== $entry = $dir->read()) {
// Skip pointers
if ($entry == '.' || $entry == '..') {
continue;
}
// Deep copy directories
if ($dest !== "$source/$entry") {
sl_copyr("$source/$entry", "$dest/$entry");
}
}
// Clean up
$dir->close();
return true;
}
/** Ftp implementation **/
function sl_open_fileoperations_ftp() {
$ftpuser = Get::cfg('ftpuser');
$ftppass = Get::cfg('ftppass');
$ftphost = Get::cfg('ftphost');
$ftpport = Get::cfg('ftpport');
$result = FALSE;
$timeout = Get::cfg('ftptimeout', 0);
if( $timeout == 0 ) {
$timeout = ini_get('max_execution_time');
if( $timeout == 0 ) {
$timeout = 20;
} elseif( $timeout > 60 ) {
$timeout = 50;
} else {
$timeout = round(($timeout*8)/10);
}
}
$GLOBALS['ftpConn'] = @ftp_connect( $ftphost, $ftpport, $timeout );
if( $GLOBALS['ftpConn'] === FALSE ) {
return FALSE;
}
if( @ftp_login($GLOBALS['ftpConn'], $ftpuser, $ftppass) )
return TRUE;
else
return FALSE;
}
function sl_close_fileoperations_ftp() {
if($GLOBALS['ftpConn'] !== false) ftp_close($GLOBALS['ftpConn']);
}
function sl_upload_ftp( $srcFile, $dstFile ) {
$ftppath = Get::cfg('ftppath')._folder_files_;
$ftpConn = $GLOBALS['ftpConn'];
//ftp_exec ( $ftpConn, 'CWD' );
ftp_pasv ( $ftpConn, true );
if( !ftp_put( $ftpConn, $ftppath.$dstFile, $srcFile, FTP_BINARY) ) {
return FALSE;
} /*
if( ftp_site( $ftpConn, "CHMOD 0666 $ftppath"."$dstFile" ) === FALSE ) {
return FALSE;
} else {
return TRUE;
} */
return TRUE;
}
function sl_mkdir_ftp( $path, $mode = FALSE) {
$ftppath = Get::cfg('ftppath')._folder_files_;
$ftpConn = $GLOBALS['ftpConn'];
if( !@ftp_mkdir($ftpConn, $ftppath.$path) )
return FALSE;
/*
if( $mode !== FALSE ) {
if( ftp_site( $ftpConn, "CHMOD 0777 $ftppath"."$path" ) === FALSE ) {
return FALSE;
} else {
return TRUE;
}
} else {
return TRUE;
}
*/
return TRUE;
}
function sl_fopen_ftp( $file, $mode ) {
// only create file then open it with fopen
$ftppath = Get::cfg('ftppath')._folder_files_;
$ftpConn = $GLOBALS['ftpConn'];
if( !file_exists( $GLOBALS['where_files_relative'].$file ) ) {
if( !ftp_put( $ftpConn, $ftppath.$file, dirname(__FILE__)."/nullfile", FTP_BINARY ) ) {
return FALSE;
} else {
/*
if( ftp_site( $ftpConn, "CHMOD 0666 $ftppath"."$file" ) === FALSE )
return FALSE;
*/
}
}
$ret = @fopen( $GLOBALS['where_files_relative'].$file, $mode );
return $ret;
}
/** CGI Implementation **/
function sl_upload_cgi( $srcFile, $dstFile ) {
global $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url."testcgi.sh?fname=".$dstFile);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
$hfileSrc = fopen( $srcFile, "rb" );
$hfileDst = fopen( $dstFile, "wb" );
while (!feof($hfileSrc)) {
$buffer = fread($hfileSrc, 8192);
fwrite( $hfileDst, $buffer );
}
fclose( $hfileSrc );
fclose( $hfileDst );
return TRUE;
}
/**
* @param $path pathname for file retriving
* @return bool
**/
function sl_unlink( $path ) {
if( !file_exists($GLOBALS['where_files_relative'].$path) ) return true;
return @unlink($GLOBALS['where_files_relative'].$path);
}
?>