В этой записи буду собирать скрипты и функции, заметки которые слишком короткие чтобы им посвящать отдельную запись, но при этом могут мне в будущем пригодится.
Отображение кириллицы в windows-консоли:
echo mb_convert_encoding($line, 'cp866', 'UTF-8');
Ошибка php не является внутренней или внешней командой
Если в консоли при вызове php скрипта наблюдается ошибка:
"php" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
То решение ошибки: создать в директории C:\Windows\System32 файл php.cmd со следующим содержимым
@echo off @set PHPINI_PATH="C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-binaries\php\php5619vc11x86x170113165707" @set PHP_COMMAND="C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-binaries\php\php5619vc11x86x170113165707\php.exe" @%PHP_COMMAND% -q -d html_errors=off -c %PHPINI_PATH% %1 %2 %3 %4 %5 %6 %7 %8 %9
Вместо моего пути "C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-binaries\php\php5619vc11x86x170113165707" указывайте свой.
Отправить письмо в utf-8 кодировке
function mail_utf8($to, $subject = '(No subject)', $message = '', $from) {
$header = 'MIME-Version: 1.0' . "\n" . 'Content-type: text/plain; charset=UTF-8'."\n"
.'From: '.'=?UTF-8?B?'.base64_encode('Сайт elims.org.ua').'?='.' <' . $from . ">\n";
mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header);
}
$to = 'test@gmail.com';
$subject = 'Тема письма';
$from = 'no-reply@elims.test.com';
$message = 'Тут какой-то текст письма';
mail_utf8($to, $subject, $message, $from);
Еще есть популярная библиотека: PHPMailer - рекомендую.
Загрузка файлов с FTP-сервера
Скрипт загружает с FTP-сервера файлы не старше указанного количества секунд. Если файл уже скачан, то он не скачивается, если размер локального файла и файла на фтп отличаются, то файл скачивается заново.
<?php
function ftp_download($local_path,$server_path,$ftp_server,$ftp_user_name,$ftp_user_pass,$time_elapsed) {
$conn_id = ftp_connect($ftp_server);//создаем подключение
echo "Connect: OK\n";
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);//логинимся
echo "Login: OK\n";
$contents = ftp_nlist($conn_id, $server_path);//получаем список файлов в папке сервера
foreach ($contents as $key => $filename_server) { //для каждого файла в папке на сервере
$file_time = ftp_mdtm($conn_id, $filename_server);
$time_ago = time()-$file_time;
if ($time_ago < $time_elapsed) {
$filename_local = $local_path . substr($filename_server,12);//полное имя локального файла
$file_size_server = ftp_size($conn_id, $filename_server);//размер файла на сервере
$file_size_local = -2;//обнуление переменной
if (file_exists($filename_local)) {//если локальный файл существует
$file_size_local = filesize($filename_local);//получаем размер локального файла
if ($file_size_local == $file_size_server) {//если размеры локального файла и файла на сервере совпадают
echo "exist: $filename_local\n";
}
}
if (!(file_exists($filename_local))or($file_size_local != $file_size_server)) {//если локального файла нет или размеры отличаются
$kilobytes = round($file_size_server/1024);//размер в килобайтах
echo "download $filename_server. KiloBytes: $kilobytes\n";
if (ftp_get($conn_id, $filename_local, $filename_server, FTP_BINARY)) {//качаем файл
echo "Successfully written to $filename_local\n";//если загрузка удалась
}
else {echo "There was a problem\n";}//если не удалась
}
}
else {echo "Too old file: $filename_server\n";}
}
ftp_close($conn_id);//закрываем фтп-соединение
}
$time_elapsed = 60*60*24*30;//максимально давняя дата модификации файла который нужно качать в секундах от текущего времени
$local_path = "D:\Temp-D\backups\\"; //локальная папка для файлов
$server_path = "/backup/sql/"; //Папка на сервере
$ftp_server = "101.102.200.103"; //Адрес FTP сервера
$ftp_user_name = "elims_login"; //ФТП-логин
$ftp_user_pass = "elims_password"; //ФТП-пароль
ftp_download($local_path,$server_path,$ftp_server,$ftp_user_name,$ftp_user_pass,$time_elapsed);
$server_path = "/backup/data/"; //Папка на сервере
ftp_download($local_path,$server_path,$ftp_server,$ftp_user_name,$ftp_user_pass,$time_elapsed);
?>Сравниваем два файла
Скрипт сравнивает два файла и выводит строки, которые есть в первом файле, но нет во втором
<?php
$file = 'D:\Temp\file1.txt';
$file2 = 'D:\Temp\file2.txt';
$lines = file($file); //загружаем файл в массив строк
$lines2 = file($file2); //загружаем файл в массив строк
$lines_count = count($lines); //количество строк в массиве
foreach ($lines as $i_line => $line) { //для каждой строки
if (!(in_array($line, $lines2))) {//сравниваем есть ли строка из первого файла среди строк второго файла
echo $i_line . " of " . $lines_count . " : " . $line; //если нету, то выводим в консоль
}
}
?>
Подсчитываем и выводим не уникальные строки в файле
PHP скрипт выводит в консоль строки которые встречаются в файле более 10 раз
<?php
$file = 'C:\Temp\questions-without-answers.txt';
$file_in_string = mb_strtolower(file_get_contents($file),'UTF-8'); //загружаем весь файл в одну строку и переводм ее в нижний регистр
$lines = file($file); //загружаем файл в массив строк
$lines_count = count($lines); //количество строк в массиве
$lines_cheched = array();//массив проверенных строк
foreach ($lines as $i_line => $line) { //для каждой строки
$line = mb_strtolower($line,'UTF-8');//переводим строку в нижний регистр
if (!(in_array($line, $lines_cheched))) {//если мы еще не проверяли такую строку
$count_match = substr_count($file_in_string, $line);//считаем сколько раз строка встречается в файле
if ($count_match > 10) { //если строка встречается более 10 раз
echo $i_line . " of " . $lines_count . " count " . $count_match . " : " . mb_convert_encoding($line, 'cp866', 'UTF-8'); //выводим в консоль
}
array_push($lines_cheched, $line); //добавляем обработанную строку в масив обработанных строк
}
}
?>