Ciao a tutti,
qualcuno sa dirmi se devo osservare accorgimenti particolari per far girare un programma PHP che utilizza smarty?
in locale funziona tutto ma sul server ho il seguente errore:
Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/components/templates/login_page.tpl) is not within the allowed path(s): (/usr/local/psa/home/vhosts/nomedominio.it/httpdocs:/tmp) in /usr/local/psa/home/vhosts/nomedominio.it/httpdocs/prova/miacartella/libs/smartylibs/Smarty.class.php on line 1510
il file login.php e i file di smarty sono nella cartella prova/miacartella
La funzionze interessata è questa:
Codice PHP:
function _parse_resource_name(&$params) {
// split tpl_path by the first colon
$_resource_name_parts = explode ( ':', $params ['resource_name'], 2 );
if (count ( $_resource_name_parts ) == 1) {
// no resource type given
$params ['resource_type'] = $this->default_resource_type;
$params ['resource_name'] = $_resource_name_parts [0];
} else {
if (strlen ( $_resource_name_parts [0] ) == 1) {
// 1 char is not resource type, but part of filepath
$params ['resource_type'] = $this->default_resource_type;
$params ['resource_name'] = $params ['resource_name'];
} else {
$params ['resource_type'] = $_resource_name_parts [0];
$params ['resource_name'] = $_resource_name_parts [1];
}
}
if ($params ['resource_type'] == 'file') {
if (! preg_match ( '/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $params ['resource_name'] )) {
// relative pathname to $params['resource_base_path']
// use the first directory where the file is found
foreach ( ( array ) $params ['resource_base_path'] as $_curr_path ) {
$_fullpath = $_curr_path . DIRECTORY_SEPARATOR . $params ['resource_name'];
if (file_exists ( $_fullpath ) && is_file ( $_fullpath )) {
$params ['resource_name'] = $_fullpath;
return true;
}
// didn't find the file, try include_path
$_params = array ('file_path' => $_fullpath );
require_once (SMARTY_CORE_DIR . 'core.get_include_path.php');
if (smarty_core_get_include_path ( $_params, $this )) {
$params ['resource_name'] = $_params ['new_file_path'];
return true;
}
}
return false;
} else {
/* absolute path */
return file_exists ( $params ['resource_name'] );
}
} elseif (empty ( $this->_plugins ['resource'] [$params ['resource_type']] )) {
$_params = array ('type' => $params ['resource_type'] );
require_once (SMARTY_CORE_DIR . 'core.load_resource_plugin.php');
smarty_core_load_resource_plugin ( $_params, $this );
}
return true;
}
credo che il problema sia sul contenuto di fullpath che è valorizzata a:
/components/templates/login_page.tpl
i file di smarty e dell'esempio sono organizzati così:
miacartella/cartella components
miacartella/cartella database_engine
miacartella/cartella images
miacartella/cartella libs
miacartella/cartella template_c
miacartella/file login.php
ecc.
io lancio login.php ma la funzione riportata sopra non raggiunge il file '/components/templates/login_page.tpl'
spero di essere stato chiaro
Grazie