Categorywebmajsterka

webmajsterka, czyli wszystko co związane ze stronami internetowymi oraz PHP

Test ORICO 2599US3 Sata to USB 3.0 HDD Case

ORICO 2599US3 BK Sata to USB 3.0 HDD Case Tool Free 2.5" HDD Enclosure
System recognize ORICO 2599US3 as NORELSYS 106X USB. Case material: ABS/Rubber Oil.

Summary

Controller decreasing IOPS so it is not the best case for SSDs. If you put normal HDD there should not be big performance differences.

Tests results:

  • SSD Disk: LITEONIT E200-080 VE82

    AS SSD Benchmark 1.8.5636.37293

    1. USB2.0
    2. USB 3.0
    3. Sata Controller ICH9M

    ORICO 2599US3 NORELSYS 106X SSD USB 2.0 USB 3.0 SATA Interface ICH9M as ssd benchmark test results

    CrystalDiskMark 4.1.0
    ORICO 2599US3 NORELSYS 106X SSD USB 2.0 USB 3.0 Native SATA Controller ICH9M crystaldiskmark test

  • HDD Disk: Seagate Momentus Thin ST320LT007 320GB 7200 RPM

    CrystalDiskMark 4.1.0
    ORICO 2599US3 NORELSYS 106X HDD USB 2.0 USB 3.0 Native SATA Controller ICH9M crystaldiskmark test

Integracja aktualizacji i sterowników Windows 7, 8, 8.1 (slipstream Windows Updates into Windows 7, 8, 8.1 installation disk)

W tym wpisie pokażę jak zintegrować aktualizacje i sterowniki z obrazem systemu Windows 8.1 Update. Integracja ze starszymi systemami (7 oraz 8) wygląda identycznie, różnią się jedynie wersje programów dism oraz oscdimg do montowania obrazu install.wim oraz programu do tworzenia obrazów płyt ISO.

Lista potrzebnych narzędzi (pilnuj architektury, jeśli x64 to sterowniki i aktualizacje też muszą być x64):

  • Obraz ISO systemu lub płyta DVD
  • Narzędzie dism
  • Narzędzie oscdimg
  • 7-zip do wypakowania obrazu ISO: http://www.7-zip.org/
  • Windows Updates Downloader (WUD) – do pobrania aktualizacji
  • 20-30GB wolnego miejsca na dysku, na którym z znajduje się katalog temp (można sprawdzić wpisując w pasku adresu %temp%)
  • Paczki ze sterownikami Mass Storage (zawiera sterowniki AHCI) oraz Chipset (zawiera sterowniki USB 3.0) http://driverpacks.net/
  • Opcjonalne: WinSetupFromUSB jeśli chcemy stworzyć bootowalny pendrive USB z systemem http://www.winsetupfromusb.com/

Przygotowanie

Tworzymy np. na dysku D:\ lub na pulpicie (nie na systemowym C:\ bo nie będziemy mieć praw do zapisu i odczytu) 5 folderów:

  1. source
  2. drivers
  3. updates
  4. tools
  5. mount
  1. source
    Do katalogu source kopiujemy zawartość obrazu ISO lub płyty Windows.
    Windows 8.1 installer source files
  2. drivers
    Do katalogu drivers wypakowujemy archiwa ze sterownikami (DP_MassStorage oraz DP_Chipset), w środku zostanie tylko jeden podfolder z nazwą typu architektury x64 lub x86.
  3. updates
    Ściągamy aktualizacje za pomocą Windows Updates Downloader (najpierw pobieramy odpowiednią listę ze strony). W okienku programu klikamy Show Options i odznaczamy opcję: Category as subfolder, potem Download i czekamy na pobranie aktualizacji. Przenosimy wszystkie pliki .cab i .msu z podfolderu z nazwą systemu (np. Windows 8.1 Update x64 ENU) do folderu updates
    Windows 8.1 7 8 Vista Updates Downloader
  4. tools
    Narzędzia nam potrzebne wchodzą w skład WAIK Tools (Windows Automated Installation Kit) dla Windows 7 i odpowiednio Windows Assessment and Deployment Kit (ADK) dla Windows 8 i 8.1. Żeby pobrać potrzebne narzędzia mamy dwie drogi:

    1. Ściągamy obrazy ISO ze stron microsoftu (po kilka GB na każdy)
    2. Szukamy programu GetWaikTools.zip, uruchamiamy i ściągamy potrzebne narzędzia (~50MB)
      Get WAIK ADK Tools

      • ADK_5 – Windows 8.1
      • ADK_4 – Windows 8
      • Waik_3 – Windows 7
      • Waik_2 – Windows Vista (only imagex, no dism)

    Kopiujemy zawartość folderów DISM oraz Oscdimg do folderu toolsWAIK ADK DISM Tools Oscdimg. (cały czas musimy pamiętać o architekturze x64 lub x86)

    1. Proces integracji

      Wszystkie ścieżki w opisie są podane jako D:\podfolder.

      1. Uruchomienie konsoli z uprawnieniami administratora – klikamy na przycisk Start, wpisujemy cmd klikamy prawym przyciskiem myszy i wybieramy Uruchom jako administrator lub wciskamy Ctrl+Shift+Enter, również otworzy konsolę z uprawnieniami administratora. Musimy przejść do folderu z narzędziami poniższym polceniem:
        cd /d d:\tools
      2. Montowanie obrazu – najpierw musimy zamontować w folderze mount obraz poniższym poleceniem żebyśmy mogli go modyfikować:
        dism.exe /mount-wim /wimfile:"D:\source\sources\install.wim" /mountdir:"D:\mount" /index:1
      3. Integrujemy sterowniki – uwzględniamy podfoldery oraz niepodpisane:
        dism.exe /Image:"D:\mount" /Add-Driver /Driver:"D:\drivers" /Recurse /ForceUnsigned

        Może to trwać 10minut lub więcej.

      4. Integracja aktualizacji – tutaj potrzebujemy sporo miejsca (nawet 20-30GB) na dysku bo każda aktualizacja musi zostać wypakowana do folderu %temp%. Narzędzie dism czyści folder plików tymczasowych dopiero po zintegrowany wszystkich aktualizacji! Możemy zintegrować tylko aktualizacje msu i pliki cab.

        W związku z powyższym będziemy każdą aktualizację instalowali z osobna, nie wskażemy całego folderu updates. Poniżej dwa polecenia w pętli, które dodadzą każdą aktualizację po kolei:

        for /R D:\updates %f in (*.msu) do dism.exe /image:"D:\mount" /add-package /packagepath:"%f"
        for /R D:\updates %f in (*.cab) do dism.exe /image:"D:\mount" /add-package /packagepath:"%f"

        Jeśli mamy dużo miejsca można wskazać cały folder (odradzam), mogą wyskakiwać błędy przy końcowych aktualizacjach (np. przez brak miejsca na dysku):

        dism.exe /image:"D:\mount" /add-package /packagepath:"D:\updates"
      5. Zatwierdzenie zmian, zapisujemy zmiany do pliku install.wim i odmontowujemy obraz:
        dism.exe /Unmount-Wim /MountDir:"D:\mount" /commit

        Porzucenie zmian i odmontowanie można wykonać poleceniem (stracimy całą pracę i oryginalny obraz zostanie nietknięty):

        dism.exe /Unmount-Wim /MountDir:"D:\mount" /discard
      6. Kompresja pliku wim – skompresujemy plik install.wim. Uwaga: dla Windows 7 musimy użyć programu dism przynajmniej z ADK4 czyli od wersji Windows 8 lub 8.1:
        dism.exe /Export-Image /SourceImageFile:"D:\source\sources\install.wim" /SourceIndex:1 /DestinationImageFile:"D:\mount\install.wim" /Compress:max

        Po kompresji musimy przenieść i zamienić plik install.wim z folderu D:\mount\ do D:\source\sources\ (kopiuj i zamień)

      7. Jeżeli chcesz mieć możliwość wybrania wersji i pominięcia wprowadzania klucza to w folderze D:\source\sources\ utwórz/zmodyfikować plik ei.cfg o zawartości:
        [EditionID]
         
        [Channel]
        OEM
        [VL]
        0
      8. Tworzenie bootowalnego obrazu ISO systemu Windows z folderu sources – stworzymy z naszego folderu źródłowego bootowalny obraz płyty D:\WIN.iso, który będzie można nagrać na płytę lub bootować z USB.
        oscdimg.exe -b"D:\source\boot\Etfsboot.com" -u2 -h -lWIN -m "D:\source" "D:\WIN.iso"

BenQ JoyBook Bios rom, wph, bin – ekstrakcja

Na przykładzie notebooka BenQ JoyBook P51E (P51) pokażę jak wydobyć BIOS w formacie ROM razem z programem do flashowania phlash16.

Wersja P51E to wersja europejska więc szukamy na stronie supportu BenQ np. malezyjskiego albo indyjskiego. Jest tam model JoyBook P51 bez E na końcu. W zakładce BIOS znajdziemy plik:
Joybook P51_[Joybook P51 BIOS v3A09]
adresy do supportu na stronie producenta:
http://benq.co.in/page/?pageid=4&plid=18&pid=790&s=1
http://www.benq.com.my/page/?pageid=4&plid=18&pid=790&s=1

Uruchamiamy Joybook P51 3A09(2.0.0.6).exe uruchomi nam się BenQ QBIOS Flash, nic nie klikamy w okienku (tj. ani Next ani Cacnel). Przechodzimy do katalogu %temp% np.:
C:\Users\username\AppData\Local\Temp
szukamy folderu o składniowo podobnej nazwie “{5425C536-DCE4-4054-8C98-0827E3201A63}”, w którym znajdują się jeden folder np. “{C53D5269-00AD-4438-A314-58F9E0AF8C7F}” i plik corecomp.ini:
BenQ JoyBook BIOS rom file extract - temp folder
wchodzimy w podfolder i otwieramy plik BIOSFlash.ini. Musimy w nim ustawić wersję biosu wyższą niż mamy na laptopie, inaczej bios się nie wypakuje (można też podmienić model).
Oryginalny plik:

[Model]
01=Joybook P51
 
[BIOS]
01=Q3A09

po podmianie Q3A09 na Q3A10

[Model]
01=Joybook P51
 
[BIOS]
01=Q3A10

Zapisujemy i zamykamy plik.

Klikamy przycisk Next w okienku QBIOS Flash i czekamy (dość długo, nawet 10 minut). Jak pojawi się okienko Joybook Status nie klikaj nic:
BenQ JoyBook BIOS ROM WPH
tylko przejdź do folderu
C:\Windows\Temp\BIOSFlashUpdate\BIOS
tam znajduje się plik PQVF.VFD, otwórz go za pomocą programu 7zip (plik .vfd da się otworzyć programem 7zip).
W środku będzie plik BIOS.rom oraz pliki do flashowania biosu phlash16.exe (wersja biosu Phoenix):
BIOS ROM file BenQ JoyBook
po wypakowaniu plików w okienku QBIOS Flash klikamy Cancel, jeśli klikniemy next to podmieni nam MBR także uważajcie!
Polecenie do flashowania Joybook P51 BIOS Q3A09:
phlash16 /x /s /c BIOS.ROM

Integracja SLIC 2.1

Jeśli ktoś chciałby dodać dodać SLIC do tego biosu to działa metoda SSV2 w narzędziu PhoenixTool Phoenix/DELL/EFI SLIC MOD v2.56. Nazwa pliku wynikowego nie może zawierać podkreślenia!
zła nazwa: BIOS_SLIC.rom
dobra nazwa: BIOS.rom
innej nazwy phlash16 nie odczyta.

polskie znaki w adresach Joomla

Joomla 1.5 ma opcję tworzenia przyjaznych adresów dla wyszukiwarek (ang. SEF URL’s – Search Engine Friendly URL’s) jednakże posiada ona pewną niedoróbkę związaną z tworzeniem aliasów dla tytułów zawierających polskie znaki. Przy tworzeniu aliasu dla tytułu Joomla opuszcza po prostu wszystkie polskie znaki przykładowo nasz artykuł jest zatytułowany
Pchnąć w tę łódź jeża lub ośm skrzyń fig
powinien zostać przekształcony w alias w postaci tranliterowanej
pchnac-w-te-lodz-jeza-lub-osm-skrzyn-fig
lub z rzeczywistymi polskimi znakami
pchnąć-w-tę-łódź-jeża-lub-ośm-skrzyń-fig
natomiast domyślnie Joomla tworzy nam taki oto alias
pchn-w-t-od-jea-lub-om-skrzy-fig
przez co staje się nieczytelny i nie jest zgodny z oryginałem oraz traci swoje znaczenie.

Brak polskich znaków w aliasach Joomla

Błędnie utworzony alias przez Joomlę 1.5 z opuszczonymi polskimi znakami

Continue reading

cURL



Funkcje bilbioteki cURL w PHP

Poniżej znajduje się lista dostępnych funkcji biblioteki cURL w PHP razem z opisami i przykładami użycia.

Całą tabelkę poniżej można przeciągać jak i resztę tabel także, wystarczy kliknąć i przytrzymać przycisk myszy.

Nazwa funkcjiOpis funkcjiPrzykładowe użycie
curl_initInicjuje sesję i zwraca uchwyt dla reszty funkcji. Przybiera jeden opcjonalny argument tj. adres URL, adres można zamiast tutaj podać w opcji “CURLOPT_URL”.
$ch = curl_init('https://tosiek.pl/');
curl_setoptUstawia pojedynczą opcję dla zwykłej sesji cURL.
curl_setopt($ch, CURLOPT_URL, "https://tosiek.pl/");
curl_setopt_arrayUstawia kilka opcji dla sesji curla na raz przy pomocy tablicy gdzie klucz to opcja a wartość to ustawienie dla tej opcji.
$options = array(
	CURLOPT_URL => 'https://tosiek.pl/',
	CURLOPT_HEADER => false,
);
curl_setopt_array($ch, $options);
curl_execWywołuje sesję curl_init z podanymi wcześniej parametrami, zwraca TRUE przy powodzeniu i FALSE przy nieudanym wywołaniu. Jeśli “CURLOPT_RETURNTRANSFER” zostanie ustawione na TRUE to ta funkcja zwróci zawartość strony przy udanym wywołaniu lub FALSE przy nieudanym.
$result = curl_exec($ch);
curl_getinfoPobiera informacje o wykonanej sesji cURL i zwraca je w postaci tablicy.
$curl_info = curl_getinfo($ch);
$curl_info = array(
	'url' => 'https://tosiek.pl/',
	'content_type' => 'text/html; charset=utf-8',
	'http_code' => 200,
	'header_size' => 862,
	'request_size' => 52,
	'filetime' => -1,
	'ssl_verify_result' => 0,
	'redirect_count' => 0,
	'total_time' => 0.344,
	'namelookup_time' => 0.047,
	'connect_time' => 0.172,
	'pretransfer_time' => 0.172,
	'size_upload' => 0,
	'size_download' => 80,
	'speed_download' => 232,
	'speed_upload' => 0,
	'download_content_length' => -1,
	'upload_content_length' => 0,
	'starttransfer_time' => 0.344,
	'redirect_time' => 0,
	'certinfo' => array(),
);
curl_errnoZwraca numer ostatniego błędu lub 0 (zero) w przypadku braku błędów.
$curl_error_number = curl_errno($ch);
curl_errorZwraca opis i wiadomość dotyczącą ostatniego błędu. W celu upewnienia się, że błąd wystąpił użyj funkcji curl_errno, która zwraca 0 (zero) jeśli wszystko jest w porządku a po napotkaniu błędu, jego numer lub curl_exec z kolei ta zwraca FALSE przy błędzie.
$curl_error_message = curl_error($ch);
curl_copy_handleKopiuje parametry danej sesji i zwraca w postaci nowego uchywtu sesji.
$ch2 = curl_copy_handle($ch);
curl_closeZamyka pojedynczą sesję cURL i zwalnia użyte zasoby (pamięć etc.). Usuwa takze uchwyt cURL $ch.
curl_close($ch);
curl_multi_initInicjuje multi-sesję i zwraca uchwyt dla niej, nie przyjmuje żadnych argumentów.
$mh = curl_multi_init();
curl_multi_add_handleDodaje zwykłą pojedynczą sesję cURL do jednej multi-sesji którą trzeba uprzednio utworzyć.
curl_multi_add_handle($mh, $ch);
curl_multi_execWywołuje i aktywuje multi-sesje, pierwszy parametr uchwyt multi-sesji stworzony za pomocą curl_multi_init a drugi informacja o tym czy jest aktywna ta multi-sesja.
$mrc = curl_multi_exec($mh, $active);
do {
	$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
 
while ($active && $mrc == CURLM_OK) {
	if (curl_multi_select($mh) != -1) {
		do {
			$mrc = curl_multi_exec($mh, $active);
		} while ($mrc == CURLM_CALL_MULTI_PERFORM);
	}
}
curl_multi_selectCzeka aż wszystkie dane zostaną zwrócone przy wszystkich połączeniach multi-sesji lub aż upłynie czas timeout; zwraca -1 przy błędach. Przyjmuje dwa parametry, uchwyt multi-sesji oraz czas timeout.
$ready = curl_multi_select($mh, '15.0');
curl_multi_info_readZwraca informacje o multi-sesji w tablicy z trzema kluczami; “msg” zwraca zawsze: ‘CURLMSG_DONE’, “result” zwraca jeden wynik spośród: ‘CURLE_*’; w przypadku powodzenia zwraca: ‘CURLE_OK’, “handle” zwraca uchwyt sesji cURL, której to informacje dotyczą. Powtórne wywołanie funkcji zwróci kolejne inne wyniki. Przyjmuje dwie wartości, pierwsza to uchwyt multi-sesji a druga to zmienna przechowująca ilość wiadomości w kolejce.
$curl_multi_info = curl_multi_info_read($mh);
		$curl_multi_info = array(
	'msg' => CURLMSG_DONE,
	'result' => CURLE_OK,
	'handle' => resource(2, curl),
);
curl_multi_getcontentJeżeli “CURLOPT_RETURNTRANSFER” jest ustawione na TRUE to zwraca zawartość strony, jedyny argument to zwykła sesja pojedynczego – uchwyt cURL.
$content = curl_multi_getcontent($ch);
curl_multi_remove_handleUsuwa sesję pojedynczego cURL z multi-sesji i umożliwia wykonanie curl_exec na zwolnionym uchwycie, po tym należy zamknąć multi-sesję oraz pojedyncze sesje żeby zwolnić użyte zasoby.
curl_multi_remove_handle($mh, $ch1);
curl_multi_closeKończy multi-sesję, nadal jednak należy usunąć zwykłe sesje z multi-sesji za pomocą curl_multi_remove_handle oraz zakończyć każdą zwykłą pojedynczą sesje cURL aby zwolnić zasoby.
curl_multi_close($mh);
curl_versionZwraca informacje o cURL w postaci tablicy.
$version = curl_version();

Wartości jakie przyjmują funkcje razem z legendą oznaczeń:

  • B – boolean, TRUE lub FALSE
  • I – wartości liczbowe
  • S – ciągi znaków
  • A – tablice
  • SR – stream resource; uchwyty do plików w wypadku curla

Nagłówki HTTP

Wszystkie opcje dotyczące nagłówków HTTP oraz typów zapytań POST, GET oraz HEAD jak i PUT.

Nazwa opcjiDomyślna wartość oraz typ wartości jakie przyjmujeOpis
CURLOPT_AUTOREFERERtrue (B)wysyła nagłówek “Referer:” po napotkaniu przekierownaia i podążaniu za nagłówkiem “Location:”
CURLOPT_CRLFtrue (B)true jeśli ma konwertować unixowe końce linii “\n”(LF) na “\r\n”(CRLF) w nagłówkach, transferach itp.
CURLOPT_FOLLOWLOCATIONfalse (B)podążaj za przekierowaniami i adresami w nagłówku “Location:”; uważaj bo moze to być nieskończona liczba przekeirowań jeśli “CURLOPT_MAXREDIRS” nie zostanie ustawione
CURLOPT_HEADERfalse (B)umieszcza nagłówki HTTP zwrotne w wynikowych danych curla
CURLINFO_HEADER_OUTfalse (B)nie jestem pewien ale chyba zwraca nagłówki HTTP przy wywołaniu curl_getinfo(); lub “śledzi uchwyt ciągu zapytania”?
CURLOPT_HTTPGETtrue (B)true aby zresetować zapytanie do metody GET; wymagane tylko jeśli ta opcja została wcześniej zmieniona bo jest to ustawione domyślnie
CURLOPT_NOBODYfalse (B)true aby wykluczyć główną część dokumentu (tj. body, to co po nagłówkami HTTP). Metoda zapytanai zmienai się na “HEAD”. Ustawienei tego na false nie mzienai metody zapytania na GET -> patrz “CURLOPT_HTTPGET”
CURLOPT_POSTfalse (B)ustaw na true aby wykonać regularne / zwykłe zapytnaie post i ustawic typ kodownaia danych na najbardziej popularny tj. “application/x-www-form-urlencoded”
CURLOPT_PUTfalse (B)true aby wykonać polecenie PUT dla pliku poprzez HTTP; plik do wysłanai musi posiadac dwie opcje: “CURLOPT_INFILE” oraz “CURLOPT_INFILESIZE”
CURLOPT_CUSTOMREQUEST” (S)Niestandardowe zapytnaie HTTP do użycia zamaist zapytań ‘GET’ oraz ‘HEAD’. Jest to użyteczne gdy chcemy wykonać np. zapytanie ‘DELETE’ lub inne bardziej skomplikowane zapytania HTTP. Prawidłowymi wartościami są np. ‘GET’, ‘POST’, ‘CONNECT’ i tak dalej, nie należy wprowadzać całej linijki żądania. Przykładowo podanie ‘GET /index.html HTTP/1.0\r\n\r\n’ będzie błędem.

Nie używaj tej opcji zanim nie upewnisz się czy serwer obsługuje dane zapytanie.

CURLOPT_ENCODING” (S)Zawartość nagłówka HTTP “Accept-Encoding:”. Włącza to dekodowanie odpowiedzi serwera. Wspierane kodowania to: ‘identity’, ‘deflate’ oraz ‘gzip’ np. ‘gzip, deflate’. Jeśli wartość jest pusta ” to wysyłany jest nagłówek zawierajace wszystkei obsługiwane typy.
CURLOPT_POSTFIELDS” (S/A)Pełne dane zapytania HTTP “POST”. Aby wysłać plik metodą POST należy poprzedzić jego pełną ścieżkę znakiem ‘@’ (ważne należy użyć bezwzględnej, pełnej ścieżki). Typ mime pliku można określić za pomocą parametru ‘type’ np. ‘@/home/file.txt; type=text/plain;’. Wartością dla tej opcji może być łanćuch składjący sie z kolejnych parametrów i ich wartości zakodowanych za pomocą urlencode() w postaci: ‘parametr1=wartosc1&parametr2=wartosc2&…’ można takze przekazać dane dla tej opcji w postaci tablicy przy czym klucz w tablicy to nazwa parametru a wartość to wartość tegożż parametru. Jeśli wartością dla tej opcji jest tablica nagłówek “Content-Type:” zostanie ustawiony i wysłany jako: “multipart/form-data”.

Od wersji PHP 5.2.0 aby plik parsowany z prefixem w postaci ‘@’ został prawidłowo wysłany i zinterpretowany dane muszą być dostarczone w postaci tablicy.

CURLOPT_REFERER” (S)Zawartość nagłówka HTTP “Referer:” używanego przy zapytaniach.
CURLOPT_USERAGENT” (S)Zawartość nagłówka HTTP “User-Agent:” używanego przy zapytaniu.
CURLOPT_HTTPHEADERarray(‘Content-type: text/plain’, ‘Content-length: 0’) (A)Tablica z nagłówkami HTTP do wysłania przy wykonywaniu zapytania.

Kodowanie polskich znaków

Kodowanie znaków

Kodowanie polskich znaków to zapis konkretnego znaku w postaci bajtów rozumianych przez komputer, które następnie są zamieniane na wizualne litery i cyfry widoczne dla końcowego użytkownika. Do obsługi polskiego alfabetu zaleca się kodowanie UTF-8, jest ono wielobajtowym kodowaniem które to dla wszystkich narodowych i diakrytycznych znaków stosuje zapis za pomocą dwóch bajtów za wyjątkiem systemów pisma CJK to jest wywodzących się z pisma chińskiego, kodowanie utf8 obsługuje standard Unicode dla wszystkich znaków i języków świata. Kodowaniem – dość powszechnie stosowanym – z rodziny ISO/IEC które posiada obsługę polskich znaków jest ISO-8859-2; jest ono z reguły używane na starszych stronach i wspiera tylko kilka języków oraz ma bardzo ograniczony zakres znaków, które jest w stanie wyświetlić.

Continue reading