PHP Tips n’ Tricks

Doskonała prezentacja Radosława Benkela dotyczą trików, które można wykorzystać w codziennej pracy z kodem php.

Tags: ,

niedziela, Styczeń 22nd, 2012 php, Symfony 2.0, Webdevelopment Brak komentarzy

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.

Tags: , , , , , ,

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: utf8

Options pozwala na ustalenie silnika MyISAM / InnoDB oraz metody porównań i kodowania znaków, o które nam chodzi.

Tags: , ,

czwartek, Listopad 10th, 2011 bez kategorii Brak komentarzy

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

czwartek, Listopad 10th, 2011 czas wolny, Webdevelopment Brak komentarzy

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.

› Continue reading

Tags: , ,

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.

› Continue reading

Tags: , , ,

wtorek, Luty 22nd, 2011 doctrine, MySql, php, symfony, Webdevelopment 2 komentarzy

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("---------------");
	}
}

Tags: , , ,

niedziela, Luty 13th, 2011 java, kryptografia, uczelnia Brak komentarzy

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("---------------");
	}
}

Tags: , , ,

niedziela, Luty 13th, 2011 java, kryptografia, uczelnia Brak komentarzy

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();
	}
}

Tags: , , ,

niedziela, Luty 13th, 2011 java, kryptografia, uczelnia Brak komentarzy

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.

› Continue reading

poniedziałek, Listopad 29th, 2010 php, WordPress 1 komentarz