2009
10.04

Ciekawe jak dużo osób ma podobny problem jak ja. Brak odpowiednich wbudowanych w PHP funkcji do obsługi adresów URL. Dodawanie każdego parametru ręcznie zastanawiając się czy wcześniej nie został rozpoczęty „query string” itp. jest dosyć czasochłonne na dłuższą metę. Postanowiłem coś na ten przykry fakt zaradzić i napisałem 4, bardzo przydatne do obsługi adresów URL, funkcje.

Funkcja explodeURL „rozbija” podany adres URL na adres dokumentu oraz tablicę parametrów zawartych w „query string”.

function explodeURL($url){
/*
@author: Raisen
@site: http://www.raisen.pl/
@e-mail: kontakt[at]raisen[dot-here]pl
*/

      if(strpos($url,'?')===false)
            return array('url'=>$url);
      $exp1=explode('?',$url);
      if(count($exp1)>2)
            return false;
      if(strlen($exp1[1])==0)
            return array('url'=>$exp1[0]);
      $exp2=explode('&',$exp1[1]);
      foreach($exp2 as $v){
            $t=explode('=',$v);
            if(strlen($t[0])>0)
                if(strlen($t[0])>2 && substr($t[0],-2)=='[]')
                    $params[substr($t[0],0,-2)][]=$t[1];
                else
                    $params[$t[0]]=$t[1];
      }
      return array('url'=>$exp1[0],'params'=>$params);
}
// Zwraca tablice w postaci:
// Array (
// "url" => ":adres_pliku_php:",
// "params" => Array (
//    ":klucz:" => ":wartość:"
// )
// )
// Parametry przekazywane do funkcji
// $url - poprawny adres url
// UWAGA: zwraca false gdy nie potrafi przetworzyc adresu URL

Funkcja implodeURL składa do kupy adres URL przekazany jako tablica w postaci zwracanej przez funkcję explodeURL.

function implodeURL($t){
/*
@author: Raisen
@site: http://www.raisen.pl/
@e-mail: kontakt[at]raisen[dot-here]pl
*/

      if(!isset($t['url']))
            return false;
      if(empty($t['params']))
            return $t['url'];
      //echo count($t['params']);
      reset($t['params']);
      while(list($k,$v)=each($t['params']))
        if(is_array($v)){
            $temp=array();
            while(list(,$v2)=each($v))
            //foreach($v as $key=>$val)
                $temp[]=$k.'[]='.$v2;
            $p[]=implode('&',$temp);
        }
        else {
            $p[]=$k.'='.$v;
        }
      return $t['url'].'?'.implode('&',$p);
}
// sklada URL z tableli w postaci zwracanej przez funkcje explode URL
// UWAGA: zwraca false gdy nie potrafi przetworzyc tablicy

Funkcja addUrlGet dodaje parametr „query string” do adresu URL.

function addUrlGet($url,$get_name,$get_value=''){
/*
@author: Raisen
@site: http://www.raisen.pl/
@e-mail: kontakt[at]raisen[dot-here]pl
@requires: explodeURL(), implodeURL()
*/

      $t=explodeURL($url);
      $t['params'][$get_name]=$get_value;
      return implodeURL($t);
}

Funkcja delUrlGet usuwa z „query string” adresu URL wybrany parametr.

function delUrlGet($url,$get_name=null) {
/*
@author: Raisen
@site: http://www.raisen.pl/
@e-mail: kontakt[at]raisen[dot-here]pl
@requires: explodeURL(), implodeURL()
*/

      $t=explodeURL($url);
      if(isset($get_name)) unset ($t['params'][$get_name]);
      else unset ($t['params']);
      return implodeURL($t);
}
2009
10.03

Jak stworzyć obraz ISO i wrzucić na niego dane z folderu?
Przedstawiony przeze mnie sposób działa na Ubuntu więc i na każdym Debianie. Użytkownicy innych systemów będą musieli pamiętać, żeby polecenia poprzedzone sudo wykonywać z prawami roota.
Aby to zrobić należy wykonać kolejno następujące kroki:

  1. Sprawdzić ilość miejsca jaką zajmują pliki
du ŚCIEŻKA_DO_KATALOGU -sm
  1. Stworzyć pusty obraz ISO o wymaganym rozmiarze
dd if=/dev/zero of=nowy_obraz.iso bs=1M count=POTRZEBNY_ROZMIAR_W_MB
  1. Stworzyć nowe urządzenie pseudosieci
sudo losetup /dev/loop0 nowy_obraz.iso

Jeśli urządzenie loop0 jest już w użyciu należy spróbować stworzyć urządzenie z kolejnym numerem (np. loop1) i odpowiednio zmodyfikować dalszą część tutoriala.

  1. Sformatować nowo utworzony obraz
sudo mkfs.ext3 /dev/loop0
  1. Stworzyć folder i zamontować do niego nasz obraz
sudo mkdir /mnt/tmp
sudo mount /dev/loop0 /mnt/tmp
  1. Skopiować potrzebne nam dane
cp -a ŚCIEŻKA_DO_KATALOGU /mnt/tmp
  1. Odmontować obraz
sudo umount /dev/loop0
sudo losetup -d /dev/loop0

W ten sposób otrzymujemy obraz iso naszego folderu z możliwością późniejszej edycji danych zawartych w pliku.

Jeśli natomiast potrzebujemy obrazu w formacie ISO9660 (odtwarzalnej w systemie Windows) rozwiązanie jest znacznie łatwiejsze. Tracimy natomiast możliwości zmian w pliku i przy każdej zmianie trzeba go generować od początku.

Całość ogranicza się do jednego polecenia

mkisofs -o nowy_obraz.iso ŚCIEŻKA_DO_KATALOGU