Метка: php
Сохранение/чтение содержимого массива в файл
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#записать в файл function object2file($value, $filename){ $str_value = serialize($value); $f = fopen($filename, 'a'); fwrite($f, $str_value); fclose($f); } #прочитать из файла function object_from_file($filename){ $file = file_get_contents($filename); $value = unserialize($file); return $value; } |
Закачка файла с FTP сервера на PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
$connect = ftp_connect($ip); if(!$connect){ die("Ошибка соединения"); } else { echo("Соединение установлено</br>"); }; if (ftp_login($connect, $ftplogin, $ftppass)==true){ echo("Вход по именем $ftplogin -ok</br>"); // включение пассивного режима ftp_pasv($connect, true); // загрузка файла if (ftp_put($connect, "$path/informer.ts", "$path/$astra_id/informer.ts", FTP_BINARY)) { echo "$path/$astra_id/informer.ts успешно загружен на сервер</br>"; } else { echo "Не удалось загрузить $path/$astra_id/informer.ts на сервер</br>"; } // закрытие соединения ftp_close($connect); }else { die("Ошибка входа"); }; |
Определение состояния порта на свичах Dlink на PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
<?php // Данный код создан и распространяется по лицензии GPL v3 // Изначальный автор данного кода - Грибов Павел // http://грибовы.рф function GetEnt($res){ $zz=explode("INTEGER:", $res); if (is_array($zz)==true) {return trim($zz[1]);} else {return "";}; }; //запускаем тест проверки кабеля $res=shell_exec("snmpset -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.12.$port i 1"); $res=GetEnt($res); if ($res=="1"){ //проверяем что он завершился: $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.12.$port"); $res=GetEnt($res); if ($res!="3"){ //еще разок тестанем! $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.12.$port"); $res=GetEnt($res); }; if ($res=="3"){ //есть ли линк? $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.3.$port"); $res=GetEnt($res); if ($res=="1"){echo "-линк есть</br>";} else {echo "-линка нет</br>";}; //состояние 1 пары $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.4.$port"); $res=GetEnt($res); if ($res=="0"){echo "-1 пара ОК</br>";} else {echo "-1 пара BAD</br>";}; //состояние 2 пары $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.5.$port"); $res=GetEnt($res); if ($res=="0"){echo "-2 пара ОК</br>";} else {echo "-2 пара BAD</br>";}; //состояние 3 пары $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.6.$port"); $res=GetEnt($res); if ($res=="0"){echo "-3 пара ОК</br>";} else {echo "-3 пара BAD</br>";}; //состояние 4 пары $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.7.$port"); $res=GetEnt($res); if ($res=="0"){echo "-4 пара ОК</br>";} else {echo "-4 пара BAD</br>";}; //определяем длинну пар $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.8.$port"); $res=GetEnt($res); echo "-длина 1 пары $res</br>"; $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.9.$port"); $res=GetEnt($res); echo "-длина 2 пары $res</br>"; $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.10.$port"); $res=GetEnt($res); echo "-длина 3 пары $res</br>"; $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.11.$port"); $res=GetEnt($res); echo "-длина 4 пары $res</br>"; //Определяем состояние кабеля $res=shell_exec("snmpset -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.12.$port i 1"); $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.4.$port"); $res=GetEnt($res); if ($res=="8") {echo "-Кабель не подключен</br>";}; if ($res=="1") {echo "-Кабель воткнут с одной стороны (второй конец висит в воздухе)</br>";}; } else { ?> <div class="alert alert-error"> Не удалось завершить опрос пары! </div> <?php }; } else { ?> <div class="alert alert-error"> Не удалось выполнить SNMP запрос! </div> <?php }; |
Сделано по мотивам: http://wiki.sirmax.noname.com.ua/index.php/Dlink_Cable_Tester
Работа с транзакциями MySQL на PHP
С часа три вероятно мучался вчера, пока подобрал вариант кода, который корректно отрабатывает.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$err=""; $lb=new Tsql(); $lb->connect($myrow["host"], $myrow["username"], $myrow["pass"], $myrow["basename"]); $lb->start_transaction(); $sql="INSERT INTO payments (agrm_id,amount,comment,receipt,pay_date,local_date,status,mod_person,amount_cur) VALUES ('$agrm_id','$amount','Автоматически загруженный платеж','$uniid','$dat',now(),0,'$manager_id','$amount')"; if ($err==""){ $result2 = $lb->ExecuteSQL($sql); if ($result2=='') {$err="Error!";}; }; $sql="UPDATE agreements SET balance=balance+$amount where agrm_id='$agrm_id'"; if ($err==""){ $result2 = $lb->ExecuteSQL($sql); if ($result2=='') {$err="Error!";}; }; if ($err==""){ $lb->commit(); } else { $lb->rollback(); PutLog('----ошибка занесения платежа(2): ' . $err); }; unset($lb); |
Использованный класс:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
<?php // Данный код создан и распространяется по лицензии GPL v3 // Изначальный автор данного кода - Грибов Павел // http://грибовы.рф class Tsql { var $idsqlconnection; // идентификатор соединения с БД // соеденяемся с БД и выбираем таблицу, получаем $idsqlconnection function connect($host,$name,$pass,$base){ global $codemysql; $this->idsqlconnection=new mysqli($host,$name,$pass,$base); if (mysqli_connect_errno()) { $serr=mysqli_connect_error(); die("Error connect to Mysql or select base: $serr"); } $result = mysqli_query($this->idsqlconnection,"SET NAMES $codemysql"); mysqli_set_charset($this->idsqlconnection, "$codemysql"); } function ExecuteSQL($sql){ //echo "$sql<br>"; $result = mysqli_query($this->idsqlconnection,$sql); if ($result==""){echo mysqli_connect_error();}; return $result; } function start_transaction(){ return mysqli_query($this->idsqlconnection,"START TRANSACTION"); //return mysqli_begin_transaction($this->idsqlconnection); } function commit (){ return mysqli_query($this->idsqlconnection,"COMMIT"); //return mysqli_commit($this->idsqlconnection); } function rollback(){ return mysqli_query($this->idsqlconnection,"ROLLBACK"); //return mysqli_rollback($this->idsqlconnection); } function close(){ return mysqli_close($this->idsqlconnection); } } |
Как оказалось, главной фишкой — нельзя использовать внутри цикла begin transaction — commit (или rollback) обработку ошибок при помощи mysqli_error — PHP падает в FATAL ERROR.. Почему? Вопрос интересный.