PHP скрипты и заметки

В этой записи буду собирать скрипты и функции, заметки которые слишком короткие чтобы им посвящать отдельную запись, но при этом могут мне в будущем пригодится.

Отображение кириллицы в 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);

Загрузка файлов с 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); //добавляем обработанную строку в масив обработанных строк
 }
}
?>
Понравилось? =) Поделись с друзьями:

Обсудить