Práca zo súbormi SafeMod ON obchadzka cez FTP

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 '' */

?>

Často používana funkcia fopen() a jej FTP náhrada.

 
Z funkciou fopen() byva problem hlavne ak subor ešte neexistuje a preto to skúsime vyriešit tym že takyto súbor si cez FTP vytvoríme a až potom doňho zapíšeme. K tejto funkcii potrebujeme dva subory ftpconf.php a blank.txt ktorý budeme cez FTP kopírovať ako daný súbor ktorý chceme vytvoriť takzvanú predlohu.

<?php
function sf_fopen($remo_file$mode)
{
/// ak nieje SafeMod ON  tak je zbytočne zdlhave si to komplikovať 
/// a funkcia sa vykona klasick&yacute;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$fp1FTP_BINARY);
while (
$ret == FTP_MOREDATA) {
   echo &
quot;.&quot;;
   
// pokracuje upload...
   
$ret ftp_nb_continue($conn_id);
}
if (
$ret != FTP_FINISHED) {
   echo &
quot;Nastal problem pri pri spojen&iacute;.&quot;;
   exit(
1);
}


  
ftp_chmod($conn_id0777$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;
}
?>

Funkcia pre zmenu práv chmod() 

<?php
if (!function_exists('ftp_chmod')) {
function 
ftp_chmod($ftp_stream$mode$filename)
{
return 
ftp_site($ftp_streamsprintf('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;
}
?>

Funkcia vytvorenie adresára mkdir()

<?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;
}


?>

Funkcia na zmazanie adresára rmdir()

<?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;
}

?>

Funkcia na premenovanie rename()

<?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;
}

?>