| Rubrika Php / mysql
Pridať komentár
Práca so súbormi pri zapnutom safe_mode
Pri tvorbe skriptov sa už mnoho z vás určite stretlo s problematickou prácou so súbormi pri zapnutom safe_mode. Tento mód je zapnutý na väčšine hostingoch kvôli bezpečnosti a málo ktorá hostingová spoločnosť bude súhlasiť s jeho vypnutím. Preto som pre vás pripravil zopár funkcií na prácu so súbormi ktore dokážu prostredníctvom natívnych FTP funkcii simulovať bežne používané funkcie na prácu so súbormi.
Potrebné nastavenia
<? $ftp_server = 'ftp.server.sk'; $ftp_user_name = 'server.sk'; $ftp_user_pass = 'passwd'; $sub_ftp = 'web/'; // cesta k priečinku ?>
Často používana funkcia fopen() a jej FTP náhrada
S funkciou fopen() býva problém hlavne ak súbor ešte na
serveri neexistuje. Riešením je vždy pred použitím funkcie takýto súbor
cez FTP vytvoriť a až otvárať a zapisovať. K tejto funkcii potrebujeme dva
mať fuknčné nastavenia (viď vyššie) a súbor blank.txt ktorý budeme cez
FTP kopírovať – ako predlohu.
<?php function sf_fopen($remo_file, $mode) { // ak nieje SafeMod ON tak je zbytočne zdĺhavé si to komplikovať a funkcia sa vykoná klasickým spôsobom if (!ini_get('safe_mode')) return fopen($remo_file, $mode); if (file_exists($remo_file)) { $fp = fopen($remo_file, $mode); } else { if(ini_get('safe_mode')) { // najprv vytvor súbor require_once dirname(__FILE__) . '/ftpconf.php'; // konfiguračný súbor s nastaveniami $file = 'blank.txt'; $remote_file = $sub_ftp.$remo_file; // nastavenie jednoduchého FTP spojenia $conn_id = ftp_connect($ftp_server); // login $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); $ltt = ftp_pwd($conn_id); // príprava kopírovania $fp1 = fopen($file, 'r'); $ret = ftp_nb_fput($conn_id, $remote_file, $fp1, FTP_BINARY); while ($ret == FTP_MOREDATA) { // pokracuje upload... $ret = ftp_nb_continue($conn_id); } if ($ret != FTP_FINISHED) { echo Nastal problem pri pri spojení; exit; } ftp_chmod($conn_id, 0777, $remote_file); // nastavenie práv na zapisovanie do súboru fclose($fp1); // close connection ftp_close($conn_id); //až potom spracuj $fp = @fopen($remo_file, $mode); } else { $fp = fopen($remo_file, $mode); } } return $fp; } ?>
Zmena práv súborov v PHP – alternatíva k chmod()
<? 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('konfiguracny.php'); $conn_id = ftp_connect($ftp_server); $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); ftp_close($conn_id); return; } ?>
PHP funkcia vytvorenie adresára v – alternatíva k mkdir()
<? function sf_mkdir($dir, $mode) { if(!ini_get('safe_mode'))return mkdir($dir, $mode); require('konfiguracny.php'); $conn_id = ftp_connect($ftp_server); $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; ftp_close($conn_id); return TRUE; } ?>
PHP funkcia na zmazanie adresára – alternatíva k rmdir()
<? function sf_rmdir($dir) { if(!ini_get('safe_mode'))return rmdir($dir); require('konfiguracny.php'); $conn_id = ftp_connect($ftp_server); $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; ftp_close($conn_id); return TRUE; } ?>
PHP funkcia na premenovanie – alternatíva k rename()
<? function sf_rename($old, $new) { if(!ini_get('safe_mode'))return rename($old , $new); require('konfiguracny.php'); $conn_id = ftp_connect($ftp_server); $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; ftp_close($conn_id); return TRUE; } ?>
Článok bol pôvodne uverejnený na PHPecko.org.

naspäť
