Pri tvorbe skriptov sa už mnoho znás určite stretlo z problémami pri praci zo súbormi v SafeMode. Tento mod je zapnuty na večšine hostingoch kvôli bezpečnosti a málo ktora hostingová spoločnost bude súhlasiť z jeho vypnutím. Preto som pripravil pre vás pár funkcii pre prácu zo súbormi ktore dokážu obýsť tento SafeMod ON cez FTP spojenie
Warovanie: " nahraďte v zdrojovom kóde " dvojitou uvodzovkou.
Potrebné nastavenia:
(ftpconf.php)
<?php
$ftp_server = 'ftp.phpecko.sk';
$ftp_user_name = 'phpecko.sk';
$ftp_user_pass = 'passwd';
$sub_ftp = 'web/'; ///example: 'web/www/'
/* ak je vas priečinok počiatočny aj po prihlaseni na ftp tak '/'
lomitko neuvadzame a použijeme prazdne '' */
?>
<?php
function sf_fopen($remo_file, $mode)
{
/// ak nieje SafeMod ON tak je zbytočne zdlhave si to komplikovať
/// a funkcia sa vykona klasickým sposobom
if(!ini_get('safe_mode'))return fopen($remo_file, $mode);
if (file_exists($remo_file)) {
/// v safe mode je problem z funkciou fopen()
/// hlavne vtedy ak dany subor este neexistuje takze tiez rovno na vec bez FTP
$fp = fopen($remo_file, $mode);
} else {
if(ini_get('safe_mode'))
{
///najprv vytvor subort
require('/ftpconf.php');
$file = '/blank.txt';
$remote_file = $sub_ftp.$remo_file;
// nastavenie jednoducheho FTP spojenia
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
$ltt = ftp_pwd($conn_id);
// priprava kopirovania
$fp1 = fopen($file, 'r');
$ret = ftp_nb_fput($conn_id, $remote_file, $fp1, FTP_BINARY);
while ($ret == FTP_MOREDATA) {
echo ".";
// pokracuje upload...
$ret = ftp_nb_continue($conn_id);
}
if ($ret != FTP_FINISHED) {
echo "Nastal problem pri pri spojení.";
exit(1);
}
ftp_chmod($conn_id, 0777, $remote_file);
fclose($fp1);
// close connection
ftp_close($conn_id);
///az potom spracuj
$fp = @fopen($remo_file, $mode);
}else{
$fp = fopen($remo_file, $mode);
}
}
return $fp;
}?><?php
if (!function_exists('ftp_chmod')) {
function ftp_chmod($ftp_stream, $mode, $filename)
{
return ftp_site($ftp_stream, sprintf('CHMOD %o %s', $mode, $filename));
}
}
function sf_chmod($file , $mode)
{
if(!ini_get('safe_mode'))return chmod($file , $mode);
require(WB_PATH.'/ftpconf.php');
// set up basic connection
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
$file = $sub_ftp.str_replace(WB_PATH, '', $file);
ftp_chmod($conn_id, $mode, $file);
// close the connection
ftp_close($conn_id);
return;
}
?>
<?php
function sf_mkdir($dir, $mode)
{
if(!ini_get('safe_mode'))return mkdir($dir, $mode);
require(WB_PATH.'/ftpconf.php');
// set up basic connection
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
$dir = $sub_ftp.str_replace(WB_PATH, '', $dir);
if (!ftp_mkdir($conn_id, $dir))return FALSE;
// close the connection
ftp_close($conn_id);
return TRUE;
}
?>
<?php
function sf_rmdir($dir)
{
if(!ini_get('safe_mode'))return rmdir($dir);
require(WB_PATH.'/ftpconf.php');
// set up basic connection
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
$dir = $sub_ftp.str_replace(WB_PATH, '', $dir);
if (ftp_rmdir($conn_id, $dir)) return FALSE;
// close the connection
ftp_close($conn_id);
return TRUE;
}
?>
<?php
function sf_rename($old, $new)
{
if(!ini_get('safe_mode'))return rename($old , $new);
require(WB_PATH.'/ftpconf.php');
// set up basic connection
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
$old = $sub_ftp.str_replace(WB_PATH, '', $old);
$new = $sub_ftp.str_replace(WB_PATH, '', $new);
if (!ftp_rename($conn_id, $old, $new))return FALSE;
// close the connection
ftp_close($conn_id);
return TRUE;
}
?>