Pliki CSV są chyba jednymi z najczęściej spotykanych jeśli chodzi o import i eksport danych. Dlatego ich obsługa w PHP jest dużo łatwiejsza dzięki wbudowanym funkcją fgetcsv oraz fputcsv. Więcej jak zawsze najdziecie w dokumentacji, a poniżej proste implementacje wykorzystania funkcji.
Czytaj dalejTag: PHP
PHP7 : install ext-dom issue
Korzystając z composer-a w projekcie możemy zetknąć się z błędem ext-dom wynikającym z braku odpowiednik pakietów zainstalowanych na serwerze.
Czytaj dalejJak włączyć Cross-Origin Resource Sharing (CORS) za pomocą PHP
Dostęp do ustawień Apache / Nginx mamy w momencie, gdy to my zarządzamy serwerem. W przypadku serwerów współdzielonych raczej takich możliwości nie ma. Co może nieco utrudnić życie, gdy spotkacie się z „błędem” CORS.
Czytaj dalejJak zainstalować Imagick dla PHP 7 na Ubuntu 16.04
Instalacja pakietu Imagick w systemie Ubuntu 16.04 jest banalnie prosta i sprowadza się do wydania jednego polecenia. A to dzięki temu, że pakiety są dostępne w repozytorium.
Czytaj dalejWarning: mkdir(): File exists in System.php on line 294
W niektórych przypadkach podczas instalacji pakietów z wykorzystaniem PECL może pojawić się błąd, który zablokuje instalację. Gdy przyjrzymy się mu bliżej to jego usunięcie jest banalnie proste.
Czytaj dalejJak podzielić ciąg znaków w PHP bez dzielenia słów ?
W różnych przypadkach potrzebujemy podzielić jakiś dłuższy ciąg znaków. Z reguły będzie to jakiś fragment tekstu. Z takim podziałem wiąże się pewne ograniczenie, nie chcemy, aby były podział przebiegał w środku jakiegoś słowa. Rozwiązaniem tego problemu jest użycie jednej funkcji 😉
Czytaj dalej[PHP] Jak w prosty sposób dodać dni, godziny, minuty, sekundy do jakiejś daty ?
PHP udostępnia prosty mechanizm operacji na dacie i czasie co sprawia, że dodawanie dni, godzin, minut oraz sekund jest bardzo proste. Do tego celu wykorzystamy funkcję date
, do której przekażemy znacznik czasu zwrócony z funkcji strtotime
.
[Linux][PHP] Jak zainstalować CURL dla PHP ?
Chcąc korzystać z Curl-a w PHP konieczna jest jego instalacja na maszynie lokalnej lub serwerze (tu może być gorzej jeśli jest to hosting współdzielony).
Czytaj dalej
Jak zainstalować Nginx + PHP + MySQL + phpMyAdmin na Raspberry PI (Raspbian) ?
Raspberry PI dzięki swojej cenie znajduje bardzo wiele zastosowań, jednym z nich może być mini serwer www. Jednak ze względu na nie najmocniejszą specyfikację należy wykorzystywać lepiej zoptymalizowane wersje czy to serwera WWW np. Nginx czy też PHP (PHP-FPM). Poniżej zaprezentuję jak zainstalować pełen serwer www wraz z PHP, MySQL oraz phpMyAdmin.
Czytaj dalej
[Skrypt] Jak zaimportować urządzenia z DUDE do Smokeping
DtoS (Dude to Smokeping) to skrypt mający za zadanie import listy urządzeń z programu DUDE i export ich do Smokeping. Do poprawnego działania skryptu potrzebny jest dostęp do DUDE po http.
Skrypt powinien być wykonywany z poziomu konsoli w uprawnieniami root’a lub użytkownika z uprawnieniami do operacjach na smokeping.
<?php /* * Generator pliku z programu Dude do Smokeping * * Autor: Piotr Lewandowski * E-mail: picom@esnet.pl * */ ################################################################### ############################# Funkcje ############################# ################################################################### /* * Zamiana polskie znakow na bez ogonkow */ function rewrite($string) { $a = array( 'Ę', 'Ó', 'Ą', 'Ś', 'Ł', 'Ż', 'Ź', 'Ć', 'Ń', 'ę', 'ó', 'ą', 'ś', 'ł', 'ż', 'ź', 'ć', 'ń' ); $b = array( 'E', 'O', 'A', 'S', 'L', 'Z', 'Z', 'C', 'N', 'e', 'o', 'a', 's', 'l', 'z', 'z', 'c', 'n' ); $string = str_replace( $a, $b, $string ); $string = preg_replace( '#[^a-z0-9]#is', ' ', $string ); $string = trim( $string ); $string = preg_replace( '#\s{2,}#', ' ', $string ); $string = str_replace( ' ', '-', $string ); return $string; } function downloadContent($url, $postdata = null) { if (!function_exists('curl_init')) { die('Sorry cURL is not installed!'); } $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); curl_setopt ($ch, CURLOPT_TIMEOUT, 60); curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt ($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt'); curl_setopt ($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt'); if($postdata) { curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); curl_setopt ($ch, CURLOPT_POST, 1); } $content = curl_exec ($ch); curl_close($ch); return $content; } /* * Sortowanie tablicy dwuwymiarowej */ function stw($array, $cols) { $colarr = array(); foreach ($cols as $col => $order) { $colarr[$col] = array(); foreach ($array as $k => $row) { $colarr[$col]['_'.$k] = strtolower($row[$col]); } } $eval = 'array_multisort('; foreach ($cols as $col => $order) { $eval .= '$colarr[\''.$col.'\'],'.$order.','; } $eval = substr($eval,0,-1).');'; eval($eval); $ret = array(); foreach ($colarr as $col => $arr) { foreach ($arr as $k => $v) { $k = substr($k,1); if (!isset($ret[$k])) { $ret[$k] = $array[$k]; } $ret[$k][$col] = $array[$k][$col]; } } return $ret; } ################################################################### ####################### Kod wlasciwy skryptu ###################### ################################################################### /* * Login do dude */ $username = "admin"; /* * Haslo do dude */ $password = "admin"; /* * Adres url do dude po http */ $url = "http://1.1.1.1:80"; /* * Lokalizacja wynikowego pliku */ $file="/etc/smokeping/config.d/dude.conf"; /* * Logowanie do dude po http */ $html = downloadContent($url . "/dude/main.html", "user=" . $username . "&password=" . $password . "&process=login"); /* * Sprawdzenie czy login i haslo sa poprawne. * Jezeli login i haslo sa poprawne w zawartosci $html bedzie pole formularza logowania * $sprlogowanie zwroci pusty wynik */ if(false !== strpos($html, '<input type="password" name="password">')) { die('Bledny login lub haslo!'); } /* * Odczyt listy urzadzen */ $html = downloadContent($url.'/dude/main.html?page=devices'); $x = 0; $y = 0; $dev = array(); $dom = new DOMDocument(); foreach(preg_split("/((\r?\n)|(\r\n?))/", $html) as $line) { $find1="2"; $find1=strpos(trim($line),"td align=\"right\">"); if($find1==1) { if($y==1) { @$dom->loadHTML('<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8" /></head><body>'.$line.'</body></html>'); $nodes = $dom->getElementsByTagName('td'); foreach($nodes as $link) { $dev[$x]['stan']=$link->nodeValue; } $y=0; } $find2=strpos(trim($line),"device_info"); if($find2>0) { @$dom->loadHTML('<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8" /></head><body>'.$line.'</body></html>'); $nodes = $dom->getElementsByTagName('a'); foreach($nodes as $link) { $dev[$x]['nazwa']=$link->nodeValue; $dev[$x]['href']=$link->getAttribute('href'); $href=trim($dev[$x]['href']); $startid=strpos($href,"id"); $stopid=strlen($href); $id=''; for($d=$startid+3;$d<=$stopid-1;$d++) { $id.=$href[$d]; } $dev[$x]['id']=$id; /* * Odczytywanie szczolowych informacji o urzadzeniu m.in. adres IP */ $html3 = downloadContent($url.$dev[$x]['href']); foreach(preg_split("/((\r?\n)|(\r\n?))/", $html3) as $line3) { $find3="2"; $find3=strpos(trim($line3),"name=\"address\""); if($find3==37) { @$dom->loadHTML('<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8" /></head><body>'.$line3.'</body></html>'); $nodes = $dom->getElementsByTagName('input'); foreach($nodes as $link) { $dev[$x]['ip']=$link->getAttribute('value'); } } } } $y=1; } $find4=strpos(trim($line),"map_info"); if($find4>0 || $find4!="") { @$dom->loadHTML('<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8" /></head><body>'.$line.'</body></html>'); $nodes = $dom->getElementsByTagName('a'); foreach($nodes as $link) { $dev[$x]['mapa']=rewrite($link->nodeValue); } $x++; } $find1="2"; } } $x=0; $tab = array(); foreach($dev as $line) { $tab[$line['mapa']][$x]['nazwa']=$line['nazwa']; $tab[$line['mapa']][$x]['ip']=$line['ip']; $tab[$line['mapa']][$x]['href']=$line['href']; $tab[$line['mapa']][$x]['stan']=$line['stan']; $tab[$line['mapa']][$x]['id']=$line['id']; $x++; } /* * Tworzenie pliku i otwarcie do zapisu */ $fp = fopen($file, "w"); if(false === $fp) { die('Nie udalo sie utworzyc pliku w lokalizacji "' . $file . '"'); } /* * Sortowanie po kluczu (menu glowne) */ ksort($tab); $dane=""; foreach($tab as $numer => $line) { $plus=preg_replace("/[^A-Za-z0-9 _-]/", '', $numer); $menu1=preg_replace("/[^A-Za-z0-9 _-]/", '', $numer); $title1=$numer; $dane.=""; $dane.=" + ".$plus." menu = ".$menu1." title = ".$title1." "; /* * Sortowanie podmenu po nazwie */ $line=stw($line, array('nazwa'=>SORT_ASC)); foreach($line as $line2) { $pp=preg_replace("/[^A-Za-z0-9]/", '', $line2['id']); $menu2=$line2['nazwa']; $title2=$line2['nazwa']; $ip=$line2['ip']; $dane.=" ++ ".$pp." menu = ".$menu2." title = ".$title2." host = ".$ip." "; } } /* * Zapisanie danych */ fputs($fp, $dane); /* * Zamknięcie pliku */ fclose($fp); /* * Zmiana uprawnień do pliku */ chmod($file,0755); /* * Reboot smokepinga */ exec("/etc/init.d/smokeping restart",$output);