Ниже приведен сценарий, который я использую для изменения некоторых файлов с помощью строковых букв. Файл .htaccess
иногда усекается. Размер до 2,712 байт до редактирования и будет меняться по размеру после редактирования в зависимости от длины имени домена. Когда он усекается, он заканчивается размером около 1,400 байт.PHP Редактирование файлов по FTP
$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()
? Я довольно много искал и не нашел никаких сообщений об этом для других.
Есть ли лучший способ достижения этого?
РЕШЕНИЕ
На основании ответа Wrikken, я начал использовать указатели файлов с ftp_f (получить | ставить), но в итоге с нулевой длиной файлов записывается обратно. Я перестал использовать указатели файлов и переключился на ftp_ (получить | ставить), и теперь все, кажется, работает:
$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 ([email protected]_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 ([email protected]_fput($conn_id, $remote_file, $tmpfname, FTP_ASCII, 0)) {
echo $php_errormsg;
}
}
}
unlink($tmpfname);
Как выглядит усеченная версия файла? –
@Pekka - Это просто отсутствует последняя часть файла. У меня есть несколько строк деклараций AddType и усечение обычно заканчивается в середине одной из этих строк. – Sonny