В этой записи буду собирать скрипты и функции, заметки которые слишком короткие чтобы им посвящать отдельную запись, но при этом могут мне в будущем пригодится.
Отображение кириллицы в 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); //добавляем обработанную строку в масив обработанных строк } } ?>