Archiwum dla listopad, 2007

26
lis

Ścieżki w octave

Na uczelni pracuję w matlabie ale w domu wystarcza mi któreś z rozwiązań opensource’owych. Jakiś czas temu znalazłem octave wraz z graficzną nakładką koctave. Teraz pracuję na GNOME więc odpalenie GUI pod KDE wymagało instalacji wielu pakietów i bibliotek więc sobie odpuściłem - w końcu i tak trzeba pisać w wierszu poleceń ;)

Drobny problem na jaki napotkałem to gdzie umieścić pliki *.m z własnymi funkcjami - tam gdzie są te octave’owe nie ma domyślnie praw zapisu dla użytkownika. Wystarczyła chwila z FAQ i docs na octave.org i mam rozwiązanie:

addpath(’/home/masterix/octave’);

Przy czym katalog octave musi istnieć PRZED dodaniem tej ścieżki.

24
lis

Apache2 i PHP5 ze źródełm

Jest to tekst napisany przez jednego z użytkowników polskiego forum Ubuntu, wielkie podziękowania dla bledermen!

Kompilacja ze źródeł jest tylko dodatkową opcją na instalacje apache2 + php5
ponieważ możemy to zrobić o wiele szybciej za pomocą repozytoriów(wystarczy, że wpiszemy sudo apt-get install apache2 liapache-mod-php5) i już mamy wszystko gotowe.
Opisuję instalacje ze źródeł z kilku powodów. Jednym z nich jest to że nie mogę na swoim Ubuntu zainstalować apache2 ponieważ przez nieuwagę usunąłem pliki konfiguracyjne i reinstalacja nie pomaga i uznałem że szukanie problemu zajmie mi więcej czasu niż kompilacja ze źródeł
-Po drugie widziałem na wielu forach dyskusyjnych problemy podobne do mojego z instalacją apache2 z repozytoriów
-Po trzecie po instalacja ze źródeł mamy “porządeczek” z plikami. Cały serwer znajduję się w folderze /serwer/ - tam są wszystkie pliki konfiguracyjne do apache2 i php. Mamy pełną kontrolę.
-Po czwarte widziałem mnóstwo pytań “jak połączyć apache2 + php kiedy są instalowane ze źródeł”.
-Po piąte przy kompilacji php5 nie tworzył się plik “libphp5.so” który jest niezbędny aby apache2 korzystało z php5
-po szóste fajnie jest mieć skompilowane apache2 + php5 pod własny procek

Zaczynamy!

Pobieramy niezbędne pakiety:
pobieramy źródła apache2 do pliku /serwer/
http://httpd.apache.org/download.cgi -ściągamy tą paczkę gdzie pisze Unix source
następnie rozpakowywujemy(np. XArchiwe Manager)..do /serwer/apache
a potem uruchamiamy terminal i

sudo -s
cd /
cd serwer
cd apache
cd httpd-2.2.6
./configure –prefix=/serwer/apache2

–prefix=/serwer/apache2 oznacza ,że instalujemy nasz serwer w pliku /serwer/apache2

potem wpisujemy:

make
make install

i już mamy serwer zainstalowany w /serwer/apache2
możemy usunąć katalog do którego rozpakowaliśmy apache - /serwer/apache/
sprawdzamy czy serwer działa, przechodzimy do katalogu /serwer/apache2/bin

sudo -s
cd /
cd serwer
cd apache2
cd bin
./apachectl start

działa!
jeżeli nie działa to musisz skonfigurować apache2 - ale ja tego nie opisuje ponieważ na tym forum jest bardzo dużo informacji jak to zrobić
port na którym działa serwer ustawia się w pliku /serwer/apache2/conf/httpd.conf
strony umieszczamy w /serwer/apache2/htdocs
Czyli serwer apache mamy z głowy teraz musimy zainstalować php5
sciągamy libxml2 - jak tego nie pobierzemy podczas konfiguracji php5 pokaże się błąd i nie będziemy mogli go zainstalować.
czyli wchodzimy na:
http://www.linuxfromscratch.org/blfs…l/libxml2.html
pobieramy i rozpakowywujemy jak powiedziałem np. XArchiwe Manager`em
do folderu /serwer/libxml
jak rozpakujemy to wchodzimy do tego katalogu

cd /
cd serwer
cd libxml
cd libx*
./configure
make
make install

I jest. Zabieramy się za instalacje php5

ściągamy php5 ze strony http://www.php.net/downloads.php
i rozpakowywujemy w folderze /serwer/phpsource/
przechodzimy do tego folderu

cd /
cd serwer
cd phpsource
cd php-5.2.4
./configure –prefix=/serwer/apache2 –with-apxs2=/serwer/apache2/bin/apxs

tutaj podkreślam żeby za bardzo nie kombinować z konfigurawniem php. Wiele jest przypadków, że podczas konfiguracji php innym sposobem nie tworzy się plik libphp5.so i na forum sypią się pytania “gdzie jest libphp5.so”
teraz wpisujemy:

make
make test
make install

Mamy już php5 zainstalowane, teraz trzeba “zmusić” apache żeby korzystał z tego dobrodziejstwa.
Wpisujemy:

sudo gedit /serwer/apache2/conf/httpd.conf

Szukamy:

DirectoryIndex index.html

Zastępujemy poprzez:

DirectoryIndex index.html index.htm index.php default.php main.php index.php3 index.php4

potem np pod Listen 80 wklejamy

AddType application/x-httpd-php .php

AddType application/x-httpd-php .php3

AddType application/x-httpd-php .php4

AddType application/x-httpd-php .phtml

AddType application/x-httpd-php-source .phps

LoadModule php5_module modules/libphp5.so

Restart komputera i start Apache.

24
lis

Ubuntu 7.10 i LAMP

Po problemach z OSami postawiłem na nowo Ubuntu, tym razem wersję 7.10. Oto jak najłatwiej postawić na tym LAMP:

Apache2 i PHP5 ( aktualnie będzie to Apache 2.2.4 i PHP 5.2.3 )

sudo apt-get install apache2 php5 libapache2-mod-php5

MySQL 5.0

sudo apt-get install mysql-server mysql-client php5-mysql

Tuż przed instalacją zostaniemy poproszeni o hasło dla konta root - niegdyś domyślnie było puste, teraz trzeba je ustawić.

Na koniec przydatny skrypt phpMyAdmin:

sudo apt-get install phpmyadmin

Teraz restart Apache’a i możemy się cieszyć działającym softwarem:

sudo /etc/init.d/apache2 restart

Teraz plikim które będą umieszczane w /var/www/ będą właśnie dostępne poprzez adres: http://localhost ale jest to często niewygodne( np brak uprawnień do zapisu w tym katalogu ) więc warto stworzyć sobie konta. Wykonaj:

ls /etc/apache2/mods-enabled

Jeśli nie masz tam:

  • userdir.conf
  • userdir.load

To wykonaj polecenie:

sudo cp /etc/apache2/mods-available/userdir.conf /etc/apache2/mods-enabled/userdir.conf
sudo cp /etc/apache2/mods-available/userdir.load /etc/apache2/mods-enabled/userdir.load

Po czym zrestartuj apache. Stwórz katalog public_html w home/Twoja_nazwa i masz dostęp poprzez: http://localhost/~Twoja_nazwa

15
lis

Ustawienia z bazy danych w CI

Na potrzeby własnego projektu musiał napisać sobie klasę do CI, która by mi ładnie wczytywała ustawienia z bazy danych. Piszę o tym ponieważ jest to przykład jak można rozwiązać to w tym frameworku - sama klasa niczym rewelacyjnym nie jest. Idea polega na tym, aby wczytać wszystkie dane do tablicy asocjacyjnej i na niej operować zamiast ciągle męczyć bazę danych o jeden czy dwa rekordy. Jako, że są to operacje na danych to oczywiście klasa rozszerza Model.

class Preferences extends Model
{
private $prefs;
private $changes;

public function __construct()
{
parent::__construct();
$this -> prefs = array();
$this -> changes = false;
$this -> init();
}

Zmienna changes przyda się później - wtedy wyjaśnie sens jej istnienia, poza tym wywołanie konstruktora klasy nadrzędnej i inicjalizacjaklasy Preferences.

private function init()
{
$query = $this -> db -> get( ‘preferences’ );
foreach( $query -> result() as $row )
{
$this -> prefs[ $row -> pref_name ] = $row -> pref_value;
}
}

Tutaj następuje wczytanie danych jednorazowo do tablicy. Klucze tej tablicy to również klucze w bazie danych więc para klucz-wartość jest taka sama tu i tu.

public function get( $key )
{
if( array_key_exists( $key, $this -> prefs ) )
return $this -> prefs[$key];
else
return false;
}

public function set( $key, $value )
{
if ( array_key_exists( $key, $this -> prefs ) )
{
$this -> prefs[$key] = $value;
$this -> changes = true;
return true;
}
else
return false;
}

Metody dostępowe. Jeśli istnieje element o podanym kluczu to można go odczytać/zapisać w nim nową wartość.

public function __destruct()
{
if ( $this -> changes )
{
$this -> db -> query( ‘TRUNCATE `preferences`’ );
foreach( $this -> prefs as $key => $value )
$this -> db -> insert( ‘preferences’, array( ‘pref_name’ => $key, ‘pref_value’ => $value ) );
}
}

I tu widać po co była zmienna $changes. Jeśli coś się zmieniło ( tzn była wywołana metoda set dla jakiegoś klucza w tablicy ) to trzeba zaktualizować również bazę danych na końcu. Jeśli były same odczyty to nic destruktor nie robi. Taki obiekt można potem przekazywać poprzez sesje ( zserializowany ) i możemy mieć sporą oszczędność na zapytaniach do bazy.