Aşağıda yer tutucu dizeleri ile bazı dosyaları değiştirmek için kullanıyorum bir betik. .htaccess
dosya bazen kesilmiş olur. Bu düzenleme daha önce büyüklüğü yaklaşık 2.712 bayt var ve alan adının uzunluğuna bağlı olarak düzenledikten sonra boyutu değişir. Fazlalıklar aldığında, o boyutu yaklaşık 1.400 bayt biter.
$d_parts = explode('.', $vals['domain']);
$ftpstring = 'ftp://' . $vals['username']
. ':' . $vals['password']
. '@' . $vals['ftp_server']
. '/' . $vals['web_path']
;
$stream_context = stream_context_create(array('ftp' => array('overwrite' => true)));
$htaccess = file_get_contents($ftpstring . '.htaccess');
$htaccess = str_replace(array('{SUB}', '{DOMAIN}', '{TLD}'), $d_parts, $htaccess);
file_put_contents($ftpstring . '.htaccess', $htaccess, 0, $stream_context);
$constants = file_get_contents($ftpstring . 'constants.php');
$constants = str_replace('{CUST_ID}', $vals['cust_id'], $constants);
file_put_contents($ftpstring . 'constants.php', $constants, 0, $stream_context);
Bir hata var mı file_get_contents()
, str_replace()
, ya da file_put_contents()
? Ben arama yeraldığını yaptık ve diğerleri için bu olay herhangi bir rapor bulamadım.
Bunu sağlamanın daha iyi bir yöntem var mı?
SOLUTION
Wrikken tepki dayanarak, (almak | koymak) ftp_f ile dosya işaretçileri kullanmaya başladı, ama sıfır uzunlukta dosyaları geri yazılı olması ile sona erdi. Ben dosya işaretçileri kullanarak durdurdu ve (almak | koymak) ftp_ geçti, ve şimdi her şey çalışıyor gibi görünüyor:
$search = array('{SUB}', '{DOMAIN}', '{TLD}', '{CUST_ID}');
$replace = explode('.', $vals['site_domain']);
$replace[] = $vals['cust_id'];
$tmpfname = tempnam(sys_get_temp_dir(), 'config');
foreach (array('.htaccess', 'constants.php') as $file_name) {
$remote_file = $dest_path . $file_name;
if (!@ftp_get($conn_id, $tmpfname, $remote_file, FTP_ASCII, 0)) {
echo $php_errormsg;
} else {
$contents = file_get_contents($tmpfname);
$contents = str_replace($search, $replace, $contents);
file_put_contents($tmpfname, $contents);
if (!@ftp_fput($conn_id, $remote_file, $tmpfname, FTP_ASCII, 0)) {
echo $php_errormsg;
}
}
}
unlink($tmpfname);