Skip to content

<?php
$url = "https://store.steampowered.com/app/658850/";

$doc = new DOMDocument;
libxml_use_internal_errors(true);
$doc->loadHTMLFile($url);
libxml_clear_errors();

$xpath = new DOMXpath($doc);

$title = $xpath->query('//div[@class="apphub_AppName"]');
if(count($title)) echo $title[0]->nodeValue . "\n";

$price = $xpath->query('//div[@class="discount_final_price"]');
if(count($price)){
    echo $price[0]->nodeValue . "\n";
} else{
    $price = $xpath->query('//div[@class="game_purchase_price price"]');
    if(count($price)){
        echo trim($price[0]->nodeValue) . "\n";
    }
}


Za početak:

git clone <source> ~/projekat
cd ~/projekat
composer update
git clone https://github.com/laravel/homestead.gt ~/Homestead
cd ~/Homestead
git checkout v7.4.2
bash init.sh

Zatim editujemo ~/Homestead/Homestead.yaml u nešto poput ovog:

---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/projekat
      to: /home/vagrant/code

sites:
    - map: projekat.local
      to: /home/vagrant/code/public

databases:
    - homestead

Nakon toga je potrebno dodati zapis u datoteku /etc/hosts:

192.168.10.10 projekat.local

I za kraj iz ~/Homestead direktorijuma pokrećemo virtuelnu mašinu:

vagrant up

October CMS možemo instalirati pomoću instalera, što je i preporučljiv način, a možemo i preko Kompozera:

composer create-project october/october projekat
cd projekat
php artisan october:install

Ako instalaciju vršimo preko Kompozera, onda ćemo u datoteci config/cms.php promenljivu disableCoreUpdates da postavimo na true.

Pošto ja imam običaj da projekte držim u svom home direktorijumu i da pravim simboličke linkove u /srv/http/, moraćemo da podesimo dozvole. Kao prvo i osnovno je da sebe dodam u grupu http. Nakon toga mogu ovako da podesim dozvole i da to sve manje-više radi kako treba 🙂

chown -R benke:http projekat/
chown -R http:http projekat/storage/
chmod -R ug+w projekat/

Na ovaj način mogu da menjam kod i iz Atoma i iz October CMS integrisanog editora i da nemam problema sa snimanjem dokumenata.

PHP funkcija mail() služi za slanje mejlova eksternim programom sendmail. sendmail je jako star program koji je bio dobar za ove stvari sve dok nije otkriveno da ima znatne propuste u pogledu sigurnosti. Zbog ovakve reputacije, mnoge Linuks distribucije ga više ne uvrštavaju u svoje repozitorijume već nude alternativna rešenja. Problem nastaje u tome što, ako PHP ne nađe program sendmail na sistemu, više ne može da pošalje mejl funkcijom mail(). Stoga ova alternativna rešenja za slanje mejlova često obezbeđuju "simulirani" sendmail kako bi se funkcionisanje programa koji zavise od njega nastavilo nesmetano.

Pošto se sendmail više ne nalazi u zvaničnim Arč repozitorijumima, instaliraćemo sSMTP, pojednostavljeno rešenje za slanje mejlova putem SMTP protokola. sSMTP nije kompletan mejl server i nema mogućnost primanja mejlova već služi samo da isporuči mejl sa lokalnog računara do mejl servera a to je ono što nama treba. Plus, sSMTP je kompatibilan sa programom sendmail i pravi simbolički link /usr/bin/sendmail 🙂

lrwxrwxrwx 1 root root 5 феб 18 2017 /usr/bin/sendmail -> ssmtp

sSMTP-u je potrebno navesti kojem mejl serveru treba da šalje mejlove, koji su kredencijali i slično. Sve to se čuva u konfiguracionom fajlu /etc/ssmtp/ssmtp.conf . Primer konfiguracionog fajla:

root=postmaster
mailhub=mail.server.com:465
AuthUser=username
AuthPass=password
rewriteDomain=server.com
FromLineOverride=YES
UseTLS=YES

A log možemo da vidimo sa

journalctl -f | grep sSMTP

 

Ako pravimo PHP aplikaciju koji treba da čita (a i piše) iz neke Gugl tabele, evo postupka:

1. Google API Client

Treba nam Composer kako bismo instalirali Google API Client. Google API Client će nam olakšati rad sa autorizacijom i pristupom Gugl resursima. Za instalaciju je potrebno, u direktorijumu u kojem se nalazi naš projekat, kreirati sledeći composer.json fajl:

{
    "require": {
        "google/apiclient": "^2.0"
    }
}

i pokrenuti composer update. Nakon ovoga će nam se pojaviti vendor direktorijum sa svim potrebnim klasama plus autoload skriptom.

2. API Manager

Idemo na https://console.developers.google.com/apis/dashboard da kreiramo projekat. Nakon toga klik na Enable API i sa liste biramo Sheets API.

3. Credentials

Sledeći korak su kredencijali. Idemo na Credentials > Create credentials > Service account key. Biramo New service account, dajemo mu ime a kao ulogu (role) Project > Service Account Actor. Key type nam je JSON fajl koji ćemo da skinemo i spremimo negde na sigurno.

4. Permissions

Na kraju je potrebno da dodelimo dozvole za rad sa dokumentom korisniku čiji mejl se nalazi u JSON fajlu. Dozvola može da bude samo za čitanje ili i za čitanje i pisanje u zavisnosti od toga šta želimo da naša PHP aplikacija radi.

5. PHP

Primer u PHP-u za čitanje podataka iz dokumenta sa datim ajdijem, radnim listom 2017 i iz ranga ćelija A1:AH13:

<?php

require __DIR__ . '/vendor/autoload.php';

$jsonFile = "auth.json";
$spreadsheetId = 'nbg9GnVy6bckblablatruć';
$range = '2017!A1:AH';

$client = new \Google_Client();
$client->setScopes([\Google_Service_Sheets::SPREADSHEETS]);
$client->setAccessType('offline');

$fh = fopen($jsonFile, "r");
$client->setAuthConfig(json_decode(file_get_contents($jsonFile), true));
fclose($fh);

$sheets = new \Google_Service_Sheets($client);
$data = $sheets->spreadsheets_values->get($spreadsheetId, $range, ['majorDimension' => 'ROWS']);

print_r($data);

?>

Izvor: www.phillipshipley.com

Laravel dolazi zajedno sa Bootstrap CSS frejmvorkom. Svi resursi bi po pravilu trebalo da idu u resources direktorijum (a ne direktno u public) nakon čega se rekompajliraju i premeštaju u public. Tako se npr. SASS nalazi u resources/assets/sass koji se kasnije kompajlira u CSS.

Komandom

npm install

najpre instaliramo node.js zavisnosti. Da bismo kompajlirali SASS kucamo

npm run dev

Da ne bismo kod svake promene resursa morali ovo da radimo, možemo da ga pokrenemo u rezidentnom modu:

npm run watch

Laravel je PHP frejmvork baziran na MVC arhitekturi. Slede beleške iz tutorijala koje sam nedavno prošao 🙂

Instalacija

Laravel instaliramo pomoću Kompozera:

composer create-project laravel/laravel projekat

Pošto ja ne držim projekte u /srv/http direktorijumu već pravim simboličke linkove, treba obezbediti Apache-u dozvolu za pisanje u određene direktorijume:

storage/app/public
storage/logs
storage/framework/views
storage/framework/sessions
bootstrap/cache

To je najlakše uraditi komandama

chown :http putanja
chmod g+w putanja

kao root.

Kada podesimo virtuelni hosting i lokalni domen, potrebno je da u vhosts fajlu dodamo opciju AllowOverride All za naš document root, u protivnom Mod rewrite neće raditi kako treba.

Struktura fajlova

app/*.phpmodeli
app/Http/Controllerskontroleri
app/Http/Controllers/Controller.phpcore controller that extends the base controller
resources/viewsprikazi - blade template system
routesrute - web.php main route file
configconfig files
.envdatabase credentials
database/migrationsmigracije
publiccss js etc

Rute

routes/web.php je glavni ruter. Spisak ruta može da se vidi sa

php artisan route:list

Po pravilu ruta ne treba da vraća prikaz (view) već je potrebno kreirati funkciju kontrolera koja će da vrati prikaz. Primer:

Route::get('/', 'PagesController@index');//index method of Pages controller
Route::get('/about', 'PagesController@about');
Route::get('/services', 'PagesController@services');

Kontroleri

Kontroleri se nalaze u app/Http/Controllers i kreiramo ih sa

php artisan make:controller MessagesController

Nazivi kontrolera su uvek u pluralu ("Messages" u gornjem primeru). Ako na kraju komande dodamo --resource, dobijamo i sledeće (CRUD) metode:

  • index()
  • create()
  • store(Request $request)
  • show($id)
  • edit($id)
  • update(Request $request, $id)
  • destroy($id)

Modeli

Modeli se smeštaju u app direktorijum. Kreiranje modela:

php artisan make:model Message -m

Nazivi modela su za razliku od kontrolera u singularu ("Message" u gornjem primeru). Opcija -m kreira migracione fajlove u database/migrations. Za kreiranje tabela ćemo koristiti

php artisan migrate

a za interaktivni rad sa bazom možemo da pokrenemo

php artisan tinker

Iz Tinkera se izlazi sa quit. Laravel koristi Eloquent ORM - "ActiveRecord implementation for working with databases".

Podaci o konekciji sa bazom se nalaze u .env fajlu a da bismo uopšte mogli da koristimo npr. MySQL bazu, potrebno je da u php.ini uključimo pdo_mysqli.so.

MVC je skraćenica od Model-View-Controller i predstavlja način struktuiranja modernih aplikacija. To znači da aplikacija treba da bude podeljena na tri glavne komponente (model, prikaz i kontroler) od kojih svaka treba se bavi posebnim skupom poslova:

  • kontroler upravlja korisničkim zahtevima i njegov zadatak je da poziva neophodne objekte  i obezbeđuje resurse kako bi ispunio korisničke zahteve; uobičajeno je da kontroler poziva odgovarajuće modele kako bi se izvršio dati zadatak i da onda bira odgovarajuće prikaze
  • model predstavlja podatke i operacije nad tim podacima; model kontroleru daje podatke koje je tražio korisnik
  • prikaz omogućuje različite načine predstavljanja podataka koje je obezbedio model; može postojati više prikaza istih podataka i kontroler odlučuje o tome koji će izabrati

Ako se bavite PHP-om i prvi put se susrećete sa ovakvom arhitekturom, na adresi jream.com/lab možete naći video tutorijale čoveka koji pravi sopstveni MVC od nule. Jednom kada savladate sve korake kreiranja MVC-a, možete bez problema instalirati neki od frejmvorka tipa Zend, Ji, Laravel, CI, Kejk i reći "pa ja razumem sve ovo" i krenuti da radite.

Više o MVC-u na adresi code.tutsplus.com

Izvor: Majstor Kvariš

Beanstalkd je brzi alat za upravljanje redovima poruka. Redovi poruka nam omogućuju da u njih smeštamo podatke o poslovima koje treba izvršiti u narednom periodu. U terminologiji redova poruka razlikujemo provajdere koji smeštaju poruke u jedan ili više redova na kojima će raditi radnici kako koji dođe na red. Slobodan radnik rezerviše poruku, obradi je i ukloni je iz reda. Poruke iz redova se obrađuju po FIFO principu.

Za rad sa Beanstalkd-om pod PHP-om ćemo koristiti biblioteku Pheanstalk.

Prvo nam treba autoload funkcija pošto ne koristimo Kompozer 🙂

<?php

spl_autoload_register('classLoader');

function classLoader($class){

    $class = str_replace("\\", "/", $class);

    $file = "include/" . $class . ".php";
    if(!file_exists($file)){
        $file = "include/" . $class . "/". $class . ".php";
        if(!file_exists($file)) exit("$file failed\n");
    }
    include $file;

}

?>

Zatim nam treba Provajder:

<?php

include "autoload.php";

$queue = new Pheanstalk\Pheanstalk('127.0.0.1');

while(true){

    $key = '';
    for($i = 0; $i < 8; $i++) $key.= chr(mt_rand(33, 126));
    echo "$key\n";
    $queue->useTube('test')->put("$key\n");
    sleep(rand(1, 10));

}

?>

i na kraju Radnik:

<?php

include "autoload.php";

$queue = new Pheanstalk\Pheanstalk('127.0.0.1');

while($job = $queue->watch('test')->ignore('default')->reserve()){
    echo $job->getData();
    $queue->delete($job);
}

?>

Sada možemo da pokrenemo beanstalkd iz terminala, u jednom prozoru možemo da pokrenemo Provajdera, u drugom Radnika i da pratimo rad na redu poruka 🙂

Stanje reda možemo da vidimo i u brauzeru pomoću alata Beanstalk console.