PHP Tips n’ Tricks
Doskonała prezentacja Radosława Benkela dotyczą trików, które można wykorzystać w codziennej pracy z kodem php.
Symfony 1.4 w chmurze
Znalazłem doskonałą prezentacje autorstwa Krisa Wallsmitha dotyczącą uruchamiania symfony 1.4 w chmurze Amazonu. Opisuje ona:
- implementacje doctrine 1.2 na Amazon RDS,
- zarządzanie sesją na Amazon EC2,
- Upload Plików na Amazon S3,
- konfigurację środowiska na lokalne środowisko developerskie,
- deployment projektu do cloud’a.
W sieci nie ma wiele przykładów co do tego typu implementacji symfony 1.4. Więc uważam tę prezentacje jako cenne znalezisko.
Doctrine: Tworzenie tabel w utf-8
Problem:
Po zbudowaniu projektu symfony nie wyświetlają się na stronie polskie znaki znaki diakrytyczne.
Diagnoza:
Gdy serwer MySQL ma w domyślnej konfiiguracji charset Latin-2 oraz porównywanie jest również domyślnie ustalone na Latin-2, a my wykonamy
php symfony doctrine:build --all --and-load --no-confirmation
To dostaniemy piękną bazę danych na domyślnych ustawieniach. I przy wyświetlaniu polskich znaków diakrytycznych będą wyskakiwały krzaki. By uchronić się przed taką sytuacją.
Rozwiązanie:
Należy zmodyfikować wszystkie tabele w schemacie (schema.yml) o dodatkowe opcje:
Tabela:
columns:
kolumna_1: {type: string(255)}
kolumna_2: {type: clob}
options:
type: MyISAM
collate: utf8_unicode_ci
charset: utf8Options pozwala na ustalenie silnika MyISAM / InnoDB oraz metody porównań i kodowania znaków, o które nam chodzi.
Mały fail po migracji.
Od 22.10 blog był niedostępny dla czytelników. Ponieważ miała miejsce przeprowadzka na nowy serwer (linuxpl.com). Generator subdomen w panelu zostawił mi index.html w głównym katalogu Vhosta i tak oto ruch nie był kierowany na index.php
W produkcji są 4 wpisy na tematy związane z Doctrine:
- Doctrine: behaviour NestedSet
- Doctrine: Tworzenie tabel w utf-8
- Doctrine: uruchamianie dodatkowych zapytań po build
- Doctrine: behaviour geographical
Optymalizowanie ilości Http requestów
Jednym ze sposobów na optymalizacje ilości requestów do strony, oraz zmniejszenie ilości przesyłanych danych z serwera jest łączenie i kompresowanie plików ze skryptami java script. Jest to możliwe gdy przeglądarka obsługuje taki format skompresowanych plików js.
SQLSTATE[HY000]: General error: 1005 Can’t create table
Jeżeli przy próbie wywołania polecenia:
$symfony doctrine:insert-sql
Wyskakuje Ci błąd
SQLSTATE[HY000]: General error: 1005 Can't create table 'TwojaBazaDanych.#sql-6c_2d' (errno: 121)
To znaczy że mysql nie może utworzyć relacji między obiektami, z trywialnego powodu pole klucza obcego jest różnego typu od pola powiązanego w lokalnej tabeli.
Java Szyfrowanie DES/ECB/NoPadding
package list1; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class CW1 { public static byte[] getKey(int bytes) throws NoSuchAlgorithmException{ KeyGenerator kGen = KeyGenerator.getInstance("DES"); byte[] key = new byte[bytes]; int i = 0; while(i < bytes){ kGen.init(56); SecretKey sKey = kGen.generateKey(); byte[] rawKey = sKey.getEncoded(); for(int j = 0; (j < rawKey.length)&(j+i < key.length) ; j++){ key[j+i] = rawKey[j]; } i = i + 7; } return key; } public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { /* * długość wiadomość musi być podzielna przez 8 * żeby można było użyć NoPadding */ byte[] input = "WiadomoscDoZakodowania!!".getBytes(); byte[] encrypted = null; byte[] decrypted = null; KeyGenerator kGen = KeyGenerator.getInstance("DES"); SecretKey sKey = kGen.generateKey(); byte[] keyBytes = sKey.getEncoded(); Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyBytes, "DES")); encrypted = cipher.doFinal(input); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, "DES")); decrypted = cipher.doFinal(encrypted); print(input); print(encrypted); print(decrypted); System.out.println(Arrays.equals(input, decrypted)); } public static void print(byte[] b) { System.out.println(new String(b)); System.out.println("Length: " + b.length * 8); System.out.println("---------------"); } }
Java szyfrowanie AES/ECB/PKCS5Padding
package list1; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class CW2 { public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { byte[] input = "Wiadomosc do zakodowania!".getBytes(); KeyGenerator kGen = KeyGenerator.getInstance("AES"); kGen.init(128); SecretKey sKey = kGen.generateKey(); byte[] rawKey = sKey.getEncoded(); SecretKeySpec sKeySpec = new SecretKeySpec(rawKey, "AES"); // algorytm AES, tryb ECB, dopełnianie w PCKS#5 Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, sKeySpec); byte[] encrypted = cipher.doFinal(input); cipher.init(Cipher.DECRYPT_MODE, sKeySpec); byte[] decrypted = cipher.doFinal(encrypted); print(input); print(encrypted); print(decrypted); // System.out.println(MessageDigest.isEqual(input, decrypted)); System.out.println(Arrays.equals(input, decrypted)); } public static void print(byte[] b){ System.out.println(new String(b)); System.out.println("Length: " + b.length * 8); System.out.println("---------------"); } }
Java Szyfrowanie DES/ECB/SKCS5Padding
package main; import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.SecretKeySpec; public class Main { public static void main(String args[]) { try { byte[] teskJawny = "Teskt jawny".getBytes(); byte[] klucz = "klucz".getBytes(); System.out.println(XORCoderToString(XORcoder(teskJawny, klucz), klucz)); byte[] keyBytes = null; SecretKeySpec key = new SecretKeySpec(keyBytes,"DES"); Cipher szyfr = Cipher.getInstance("DES/ECB/SKCS5Padding"); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * Metoda wykonuje operacje XOR na podanych tablicach i zwraca wynik w nowej tablicy * @param msg tablica wiadomosci * @param key tablica klucza * @return tablica po operacji XOR */ public static byte[] XORcoder(byte[] msg, byte[] key) { byte[] ret = new byte[msg.length]; for(int i=0; i<msg.length; i++) ret[i] = (byte) (msg[i]^key[i%key.length]); return ret; } /** * Metoda wykonuje operacje XOR i zwraca wynik w postaci tekstu * @param msg testk do operacji XOR * @param key klucza do operacji XOR * @return teskt otrzymany po operacji XOR */ public static String XORCoderToString(byte[] msg, byte[] key) { StringBuilder sb= new StringBuilder(); byte[] tmp = XORcoder(msg, key); for (byte b : tmp) { sb.append((char)b); } return sb.toString(); } }
WordPress dodawanie postów do facebook’a (facebook share)
Najprostszym sposobem by dołączyć możliwość podzielenia się postem na facebook’u jest instalacja wtyczki np. ShereThis.
Jednak jeżeli nie chcemy nadmiernie obciążać WordPressa dodatkowymi pluginami i ładującym się trzy dni javascriptem. Można to zrobić w template.
Search
AdTaily
Najnowsze wpisy
Kategorie
- bez kategorii (38)
- c++ (2)
- czas wolny (28)
- java (3)
- kryptografia (5)
- praca (26)
- projekty (24)
- przemyślenia (15)
- uczelnia (13)
- Webdevelopment (33)
- Adobe AIR (2)
- Adobe Flex (2)
- AJAX (3)
- Apache (1)
- cloud computing (1)
- doctrine (2)
- GoogleMaps (4)
- JavaScript (3)
- jQuery (1)
- MySql (3)
- Optymalizacja (1)
- paypal (1)
- php (14)
- symfony (3)
- Symfony 1.4 (1)
- Symfony 2.0 (1)
- WordPress (4)
Przyjaciele
Archiwa
Tagi
Najnowsze komentarze
Linki
- wykonywanie stron www
- aranżacje
- Notensatz
- darmowe pozycjonowanie
- sklep mountainboard
- Tłumaczenia angielsko polskie tanie.
- pozycjonowanie stron częstochowa
- wózki dziecięce
- Darmowe Pobieranie TORRENTY
- Pomysły i porady Mistrzunia
- zakopane noclegi
- nieruchomości warszawa
- Katalog stron
- sale weselne częstochowa
- serwis komputerowy