You are heresoftware / php

php


Drupal blok: Mobile Vikings referrers

Voor de Mobile Vikings banner rechts in beeld heb ik dit blok aangemaakt in Drupal:
<!-- stylesheet based on http://www.alistapart.com/articles/taminglists/ -->

<style>
#inline-list {
        border: 0px solid #000;
        margin: 0em;
        width: 80%;
//      width: 120px;
   right: ;
        //text-align: right;
        padding: 0px;
        font-family: Verdana, sans-serif;
        }

#inline-list p {
        display: inline;
        }

#inline-list ul, #inline-list li {
        display: inline;
        margin: ;
        padding: ;
        color: #339;
        font-weight: bold;
        }

#inline-list ul li:after {
        content: ", ";
        }
               
#inline-list ul li.beforelast:after {
        content: " en ";
        }
               
#inline-list ul li.last:after {
        content: " ";
        }
</style>

<div id="inline-list">
Met dank aan

<ul>
<?php
$url = 'https://username:password@mobilevikings.com/api/2.0/basic/points/referrals.json?msisdn=phonenumber';
$contents = file_get_contents($url);
$contents = utf8_encode($contents);
$results = json_decode($contents, true);
$i = ;
foreach ($results as $item) {
  echo ('  <li');
  switch ($i) {
    case count($results) - 2:
      echo (' class="beforelast"');
      break;
    case count($results) - 1:
      echo (' class="last"');
      break;
  }
    printf ('>%s</li>' . PHP_EOL, trim($item['name']));
    $i++;
}
?>
</ul>

om mij een gratis herlading twv €15 te bezorgen!

<!-- code from https://mobilevikings.com/nl/myviking/points/referral-links/ -->
<p align="right"><a
href="http://mobilevikings.com/referral/nWDDPmWjqDNslgWicXgSmAmjpcuOgUEB/"
title="Word een Viking"><img
src="http://mobilevikings.com/nl/referral/image/nWDDPmWjqDNslgWicXgSmAmjpcuOgUEB/banner2.jpg/"
title="Word een Viking" /></a></p>

</div>

Code review is altijd welkom. Het is ondertussen al een paar jaar geleden dat ik nog PHP aangeraakt heb, en het is de allereerste keer dat ik iets met JSON doe.

EDIT: oops, er loopt iets mis... even geduld aub!

EDIT2: probleem opgelost, ik heb direct na de file_get_contents nog een if ($contents === false) blok toegevoegd. De volledige code staat nu op Github: https://github.com/amedee/MobileVikings

Twitterbot

Sinds kort heeft deze server ook zijn eigen Twitter account: @intrepid_server. Tot nu toe doet hij nog niet veel meer dan af en toe een fortune cookie in de wereld te gooien:
<?php
include_once "twitter.php";
include_once "user.php";
$data = shell_exec('/usr/games/fortune -s -n 140 bofh-excuses');
$twi_user->updateStatus($data);
?>
of hij laat zijn uptime weten:
<?php
include_once "twitter.php";
include_once "user.php";
$data = shell_exec('/usr/bin/uptime');
$twi_user->updateStatus($data);
?>
Op het einde van de dagelijkse backup laat hij ook van zich horen:
<?php
include_once "twitter.php";
include_once "user.php";
$data = shell_exec('/usr/sbin/backup2l -s | tail -n 4 | head -n 1 | cut -f 2 -d "|" | sed "s/ //g"');
$twi_user->updateStatus("just made a ".$data." backup.");
?>
De inhoud van user.php:
<?php
$twi_user = new Twitter("intrepid_server","password");
?>
Al deze kleine maar fijne scriptjes maken gebruik van de schitterende PHP Twitter class van @tijsverkoyen. Meer scriptjes volgen later!

intrepid²: webserver

Installatie

Apache, PHP, MySQL en phpMyAdmin tesamen in één keer installeren met:

sudo aptitude install apache2 php5 imagemagick php5-imagick \
     mysql-server phpmyadmin php5-curl php5-dev php-pear make

Debian trekt zelf alle noodzakelijke afhankelijkheden binnen.

Kleine bugjes fixen

Apache gaf wel enkele waarschuwingen tijdens de installatie:

  • Starting web server: apache2apache2: apr_sockaddr_info_get() failed for intrepid
    apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
    Oplossing:
    • Toegevoegd aan /etc/hosts:
      188.40.34.110   intrepid   intrepid.amedee.be   amedee.be
    • Toegevoegd aan /etc/apache2/httpd.conf:
      ServerName amedee.be
  • Setting up ssl-cert (1.0.23) ...
    hostname: Unknown host
    make-ssl-cert: Could not get FQDN, using "intrepid".
    make-ssl-cert: You may want to fix your /etc/hosts and/or DNS setup and run
    make-ssl-cert: make-ssl-cert generate-default-snakeoil --force-overwrite
    make-ssl-cert: again.
    Oplossing:
    sudo make-ssl-cert generate-default-snakeoil --force-overwrite

Mod-rewrite aanzetten

Onder andere Drupal heeft mod-rewrite nodig, voor clean URLs. Dus:

sudo a2enmod rewrite

In /etc/apache2/sites-enabled/000-default is er ook nog een aanpassing nodig:

        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                #AllowOverride None
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

Dus AllowOverride None moet vervangen worden door AllowOverride All, anders werken de .htaccess-bestanden niet.

phpMyAdmin beveiligen

Ik vind het niet zo leuk dat om het even wie met phpMyAdmin kan klooien (ook al staat er een sterk wachtwoord op alle mysql-users. Daarom beveilig ik phpMyAdmin met mod_access door volgende aanpassing van /etc/apache2/httpd.conf:

<Directory /usr/share/phpmyadmin>
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
    Allow from 10
    Allow from <mijn-ip-adres>
</Directory>

Van zodra de OpenVPN in orde is, gaat ook de regel Allow from <mijn-ip-adres> er uit, omdat de webserver dan te bereiken zal zijn via een 10.x.x.x adres.

Apache herstarten

Om al deze configuratiewijzigingen toe te passen, moet Apache herstart worden:

sudo /etc/init.d/apache2 restart

Websites overzetten

De websites draaien allemaal op één Drupal-installatie in /var/www maar wel met elk een eigen database.

Eerst de bestanden overzetten:

sudo rsync -aczhP -e ssh root@oldserver.amedee.be:/var/www /var/

Daarna de databases overzetten. Eerst een backup maken op de oude server:

mysqldump -u root -p --all-databases | bzip2 -c > databasebackup.sql.bz2

Vervolgens de backup kopiëren naar de nieuwe server en importeren in mysql:

scp oldserver.amedee.be:"~/databasebackup.sql.bz2" .
bzcat databasebackup.sql.bz2 | mysql -u root -p

Omdat de users database nu ook mee gekopieerd is, moet er ook nog een flush privileges gebeuren in mysql. Dit heb ik via phpMyAdmin gedaan.

Eindresultaat: alle websites zijn getransplanteerd van de oude server naar de nieuwe server. Er zijn nog een paar kleinigheden die nagekeken moeten worden, zoals tijdelijke import-directories voor Drupal, maar voor de rest werkt alles.

Reclame... ;-)

Met dank aan
  • Jasmina
  • Celine
  • Pieter
  • Jeff
  • Hans
  • Jurgen
  • Jurgen
  • Marijke
  • Amedee
  • Erik
  • Danny
  • Sofie
  • Lars
  • Christophe
  • Peter
  • Jeroen
  • Jurgen
om mij een gratis herlading twv €15 te bezorgen!

Waar ben ik?