Skip to content
This repository was archived by the owner on Oct 1, 2020. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 40 additions & 42 deletions PHP 1 lesson/user2/task_4+.php
Original file line number Diff line number Diff line change
@@ -1,82 +1,80 @@
<?php

echo '<pre>';
define('DS', DIRECTORY_SEPARATOR);
$cDir = __DIR__;
$sePar = DIRECTORY_SEPARATOR;
$nDir = $cDir.$sePar.'_cache';
$cacheDir = $cDir . DS . '_cache';

if (!file_exists($nDir)){
if (!mkdir($nDir)){
if (!file_exists($cacheDir)) {
if (!mkdir($cacheDir)) {
die ('Не удалось создать директорию');
}
}

// Копируем файлы в директорию '_cache'

$dh = opendir($cDir);
while (false !==($entry = readdir($dh))){

$aFile = $cDir.$sePar.$entry;
while ($entry = readdir($dh)) {
$aFile = $cDir . DS . $entry;

if (is_dir($aFile)){
if (is_dir($aFile)) {
continue;
}

if ($aFile == __FILE__){
if ($aFile === __FILE__) {
continue;
}

if (pathinfo($aFile, PATHINFO_EXTENSION) == 'php'){
copy($aFile,$nDir.$sePar.$entry);
if (pathinfo($aFile, PATHINFO_EXTENSION) === 'php') {
copy($aFile, $cacheDir . DS . $entry);
}
}
closedir($dh);
echo "Copying done!\n";
echo "Copying done!" . PHP_EOLs;

// Ищем файлы с include в каталоге '_cache'
$hasInclude = false;
$ch = opendir($cacheDir);
while ($entry = readdir($ch)) {
$rFile = file($cacheDir . DS . $entry);
$inclFound = preg_grep("/include '.*'/", $rFile); // Определяем наличие 'include' в файле
if (empty($inclFound)) {
continue;
}

$ch = opendir($nDir);
while (false !==($entry = readdir($ch))) {
$substDone = false;
$rFile = file($nDir.$sePar.$entry);
$inclFound = preg_grep("/include '.*'/",$rFile); // Определяем наличие 'include' в файле
// print_r($inclFound)."\n";

while (!empty($inclFound)){

while (!empty($inclFound)) {
$key = array_key_first($inclFound);
$filename = explode("'",$inclFound[$key]); // Определяем имя подключаемого файла
$filename = $nDir.$sePar.$filename[1];
// echo $filename[1]."\n";
if (file_exists($filename)) {
echo "File to include ".$filename."\n";
$filename = explode("'", $inclFound[$key]); // Определяем имя подключаемого файла
$filename = $cacheDir . DS . $filename[1];

$wFile = file($filename);unset($wFile[0]); // Убираем тег '<?php' из начала файла
array_splice($rFile,$key,1,$wFile);
$inclFound = preg_grep("/include '.*'/",$rFile); // Обновляем массив значений 'include'
}
else{ // Производим замену 'include' содержимым файла
echo "File to include not found!\n";
if (!file_exists($filename)) {
echo "File to include not found!" . PHP_EOL;
unset($inclFound[$key]); // Удаляем запись о ненайденном файле из массива
continue;
}

$substDone = true;
$hasInclude = $substDone = true;
echo "File to include " . $filename . PHP_EOL;

$wFile = file($filename);
unset($wFile[0]); // Убираем тег '<?php' из начала файла
array_splice($rFile, $key, 1, $wFile); // Производим замену 'include' содержимым файла
$inclFound = preg_grep("/include '.*'/", $rFile); // Обновляем массив значений 'include'
}

if ($substDone){ // Проверяем, производились ли замены.
$fh = fopen($nDir.$sePar.$entry,'w');
foreach($rFile as $line){
fwrite($fh,$line);
if ($substDone) { // Проверяем, производились ли замены.
$fh = fopen($cacheDir . DS . $entry, 'w');
foreach ($rFile as $line) {
fwrite($fh, $line);
}
fclose($fh);
echo "Search and replace done!";
}
}
closedir($ch);
if ($substDone === false){

if ($hasInclude === false) {
echo "No files to include.\n";
}




//NOTE: за задание +++, можно кое где оптимизировать, например не пересматривать весь файл на include, а только добавляемые строки, также надо поработать над регулярками - они не сработают для html файлов внутри которых include, а по сути - это задание как раз на кеширование составных шаблонов
//NOTE: алгоритмическая ошибка - проверка переменной $substDone после цикла в котором она инициализируется - буде выведено занчение только для последней итерации
25 changes: 10 additions & 15 deletions PHP 1 lesson/user2/techplayground1.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,20 @@

$a = 77777;

if ((!is_string($a)) and (is_numeric($a)) and (is_int($a))){ // Проверка корректности данных

$sum = 0; // Вычисление суммы цифр в цикле
$num = $a;
while ($num > 0):
$digit = $num%10;
$sum +=$digit;
$num /=10;
endwhile;

echo 'Сумма цифр числа '.$a.' равна '.$sum;

if (!is_int($a)) {
echo 'Неверный ввод. Введите целое число.';
return;
}

else{
echo 'Неверный ввод. Введите целое число.';
exit(0);
$sum = 0;
while ($a > 0) { //думаю тут должно быть >= 1
$sum += $a % 10;
$a /= 10;
}

echo 'Сумма цифр числа ' . $a . ' равна ' . $sum;

//NOTE: метод в целом возможный, но реализация некорректна - условие порождает бесконечный цикл, точнее цикл ограничен размерностью дробных чисел, попробуйте вывести результат каждой итерации



23 changes: 11 additions & 12 deletions PHP 1 lesson/user2/techplayground2.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,19 @@

$a = 16;

if ((!is_string($a)) and (is_numeric($a)) and (is_int($a))) { // Проверка корректности данных
if (!is_int($a)) {
echo 'Неверный ввод. Введите целое число.';
return;
}

$sum = 0;
$sum = 0;

for ($i=1;$i < $a;$i++){ // Вычисление суммы чисел в цикле
if (!($i%3)){ // Проверка кратности 3
$sum +=$i;
}
for ($i = 1; $i < $a; $i++) {
if (!($i % 3)) {
$sum += $i;
}

echo 'Сумма кратных трем положительных чисел меньше '.$a.' равна '.$sum;
}

else{
echo 'Неверный ввод. Введите целое число.';
exit(0);
}
echo 'Сумма кратных трем положительных чисел меньше ' . $a . ' равна ' . $sum;

//NOTE: да, вариант, но не оптимальный - итераций можно сделать в 3 раза меньше и без проверок если уменьшать число на 3
33 changes: 16 additions & 17 deletions PHP 1 lesson/user2/techplayground3.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,37 +6,36 @@

$a = 1600;

if (($a < 1) or ($a > 9999)){
if (($a < 1) or ($a > 9999)) {
echo 'Значение вне диапазона';
exit (0);
return;
}

if ($a <=7) {
if ($a <= 7) { //NOTE: +++
echo 'Год ' . $a . ' не високосный.';
exit(0);
return;
}

$flag_1 = $a%4;
$flag_2=$a%100;
$flag_3=$a%400;
if ($a % 4) {
echo 'Год ' . $a . ' не високосный.';
return;
}

// Вычисление високосного года по юлианскому календарю

if (($a > 7) and (1582 > $a) and ($flag_1 == 0)) {
if ($a <= 1582) {
echo 'Год ' . $a . ' високосный.';
return;
}

//Вычисление високосного года по григорианскому календарю

elseif ($flag_1 == 0 and $flag_2 != 0){
if ($a % 100) {
echo 'Год ' . $a . ' високосный.';
return;
}

elseif ($flag_3 == 0){
echo 'Год ' . $a . ' високосный.';
if ($a % 400) {
echo 'Год ' . $a . ' не високосный.';
return;
}

else echo 'Год ' . $a . ' не високосный.';



//NOTE: алгоритм +++, по условиям - я предпочитаю вот такой линейный код, а в целом тут просится функция, которая будет возвращать true/false и ее вызов при выводе сообщения