Ниже приведен скрипт, который я использую для изменения некоторых файлов с помощью строк-заполнителей.Файл .htaccess
иногда усекается.Перед редактированием его размер составляет около 2712 байт, а после редактирования он будет различаться в зависимости от длины доменного имени.Когда оно усекается, его размер составляет около 1400 байт.
$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);
Есть ли ошибка в file_get_contents()
, str_replace()
или file_put_contents()
?Я провел немало поисков и не нашел ни одного сообщения об этом для других.
Есть ли лучший способ сделать это?
РЕШЕНИЕ
Основываясь на ответе Вриккена, я начал использовать файловые указатели с ftp_f (get | put), но в итоге получился файл нулевой длины, который записывался обратно.Я перестал использовать файловые указатели и переключился на ftp_ (get | put), и теперь все, кажется, работает:
$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);