Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM    Subskrybuj kanał ATOM dla tagu php Kanał ATOM (tag: php)

Autor wpisu: sokzzuka, dodany: 10.06.2011 09:37, tagi: php

Przeglądając dzisiaj dzone natrafiłem na ciekawy wpis Roberta Eisele, który „for fun” stworzył sobie swój fork PHP oparty na wersji 5.3.6. Wrzucił tam kilka ciekawych funkcji do obsługi stringów, trochę optymalizacji, obsługę literalnych liczb binarnych oraz krótką notację dla tablic. Pełną listę znajdziecie na jego stronie. Jak sam twierdzi nie zamierza rozwijać tego forka, jest to raczej proof of concept i będzie starał się by te ulepszenie trafiły do „oficjalnej wersji”. Źródła można jak zwykle ściągnąć z GitHub-a. Co sądzicie o ulepszeniach, które wprowadził Robert ?

Autor wpisu: Śpiechu, dodany: 10.06.2011 00:22, tagi: php

Dzisiaj drugi odcinek Waszego ulubionego serialu: Wygrzebane z GitHuba. Wszystkie stacje TV rywalizują o wyłączność na emisję kolejnego odcinka, padają kwoty siedmiocyfrowe wyrażane w zimbabwiańskich dolarach…

Imagine to udana próba ujednolicenia interfejsów różnych bibliotek graficznych w zakresie manipulacji obrazami w PHP. Nieważne czy pod maską mamy GD, ImageMagick czy Gmagick. Wszystkie operacje wykonamy za pomocą jednolitego interfejsu. Dokumentacja do znalezienia tutaj.

Pomimo tego iż projekt ma dopiero nieco ponad rok, jest przez ten czas wykonany kawał dobrej roboty. Projekt ma ładną strukturę wyrażoną w namespacach, przez co można śmiało ładować tylko potrzebne klasy za pomocą standardowego SplClassLoadera (do pociągnięcia np. stąd).

O Imagine pisał php|architect, jest również prezentacja.

Poniżej zademonstruję jak można użyć tego cuda do zmniejszenia zestawu obrazków do jednolitych kwadratów i wyświetlić na ekran w locie. To oczywiście metoda dla masochistów CPU, bo normalnie człowiek przecież zapisuje obrazki najpierw na dysk, a dopiero potem wyświetla. Efekt, który chcemy uzyskać będzie wyglądał tak:

<?php
require_once 'SplClassLoader.php';
 
// rejestrujemy przestrzen nazw Imagine
// i wskazujemy gdzie jej szukac
$classLoader = new SplClassLoader('Imagine', 'lib');
$classLoader->register();
 
// importujemy niezbedne klasy
use Imagine\ImageInterface;
use Imagine\Gd\Imagine;
use Imagine\Image\Box;
use Imagine\Image\Color;
use Imagine\Image\Point;
 
$columns = 2;
$images = 4;
$singleImgSize = 250;
 
// licze calkowita szerokosc tla
$backgroundXSize = (int) $columns * $singleImgSize;
// wysokosc zaokraglam w gore dla nieparzystych
$backgroundYSize = (int) $singleImgSize * ceil($images / $columns);
 
// jezeli mam i chce skorzystac z ImageMakicka
// to po prostu importuje wyzej
// use Imagine\Imagick\Imagine;
$imagine = new Imagine();
 
// tworze pusty obrazek w czarnym kolorze i 0 przezroczystosci
$background = $imagine->create(new Box($backgroundXSize, $backgroundYSize), new Color('000', 0));
 
// tablica z nazwami obrazkow do przeskalowania
// i wyswietlenia
$imagesArray = array('img1.jpg', 'img2.jpg', 'img3.jpg', 'img4.jpg');
 
// punkty startowe wklejania
$x = 0;
$y = 0;
 
foreach ($imagesArray as $img) {
  // otwieram obrazek z dysku,
  // zmniejszam go do kwadratu
  // uzywam trybu OUTBOUND,
  // czyli pilnuję proporcji i wywalam fragmenty dluzszego boku
  $image = $imagine->open('../images/' . $img)
            ->thumbnail(new Box($singleImgSize, $singleImgSize), ImageInterface::THUMBNAIL_OUTBOUND);
 
  // wklejam zmniejszony obrazek do tla
  // podajac lokalizacje lewego gornego rogu wklejania
  $background->paste($image, new Point($x, $y));
 
  // licze pozycje startowa dla nastepnego obrazka  
  $x += $singleImgSize;
  if ($x >= $canvasXSize) {
    $x = 0;
    $y += $singleImgSize;
  }
}
 
// obiekt Image obsluguje metode
// __toString() w postaci danych binarnych PNG
// wystarczy tylko podac naglowki
header('Content-Type: image/png');
// zamiast wyswietlac mozemy uzyc
// $background->save('obrazek.png',array('quality' => 85));
echo $background;

Oprócz typowych manipulacji typu skalowanie czy konwersja na inne formaty, projekt ma aspiracje na dosyć zaawansowane manipulacje obrazami typu odwracanie w poziomie i pionie, refleksy, wykresy, ujednolicony interfejs rysowania obiektów, histogramy itd.

Obrazki na licencji CC-BY pożyczone z Flickra. Właściciele praw do obrazków: pierwszego, drugiego, trzeciego, czwartego.

Autor wpisu: Tomasz Kowalczyk, dodany: 07.06.2011 22:49, tagi: symfony, framework, php

Problemy, jakie napotykamy podczas programowania wszelkiego rodzaju aplikacji można podzielić na dwie główne kategorie - wymagające doświadczenia i wymagające wiedzy. O ile te związane z doświadczeniem można rozwiązać bez pomocy innych - rozwiązania można po prostu wywnioskować na podstawie doświadczenia, o tyle związane z wiedzą nie są takie proste. Ich rozwiązanie to zdobycie informacji o [...]

Autor wpisu: Aiv, dodany: 06.06.2011 08:25, tagi: php

Dzisiaj w ręce wpadł mi „ciekawy” kod który ostatno zaraża niezaktualizowane sklepy bazujące na osCommerce. Kod sam w sobie nie jest bardzo skomplikowany, ale sposób w jaki został napisany zasługuje na wyróżnienie [...]Ataki na web aplikacje – cz. 8

Autor wpisu: singles, dodany: 04.06.2011 12:24, tagi: php

Krótki wpis w ramach autolansu ;) W poniedziałek, 6 czerwca 2011, w ramach koła naukowego AKAI (Politechnika Poznańska) poprowadzę wykład na temat: Jak nie zostać „programistą” PHP? – dobre i złe praktyki.

Wykład przeznaczony jest dla początkujących, ale nie mam zamiaru mówić o tym, jak pisze się skrypty w PHP, do czego służy znacznik: <?php itd. O tym piszą już w wielu książkach.

Jak sam tytuł mówi, prezentacja skupi się na wskazaniu złych i dobrych praktyk występujących podczas tworzenia kodu w języku PHP (a część z nich będzie tyczyła się ogólnie programowania). W końcu PHP jest narzędziem, jak każdy inny język – a chodzi o to, żeby używać tego narzędzia tak, aby nie zrobić krzywdy sobie albo innym ;)

Wiecej informacji znajdziecie na stronie koła.

Wszystkich zainteresowanych tematem bądź chętnych do dyskusji zapraszam :)

Autor wpisu: Zyx, dodany: 01.06.2011 08:37, tagi: php

Podczas wczorajszego KrakSpota w rozmowach kuluarowych trochę uwagi poświęciliśmy budowaniu w PHP serwisów obsługujących bardzo duży ruch internetowy idący w dziesiątki milionów odwiedzin miesięcznie. Głównym kuluaromówcą był tutaj kolega Wojciecha Soczyńskiego z Katowic, Adam, dzielący się swoimi doświadczeniami programistycznymi. Z opowieści jego wyłonił się smutny obraz, że tworząc taki system firma skazana jest właściwie tylko na swoje własne siły, ponieważ jakichś gotowych narzędzi i rozwiązań po prostu nie ma. Ten wpis pragnę poświęcić próbie analizy przyczyn takiego stanu rzeczy.

Autor wpisu: batman, dodany: 01.06.2011 08:00, tagi: php

Nie, nie pomyliłem się. Kompilator PHP do kodu maszynowego istnieje i ma się całkiem dobrze. Mowa oczywiście o Phalanger, open-source’owym projekcie, pozwalającym korzystać z PHP tak samo, jak korzysta się z na przykład C#. Na projekt natrafiłem przy okazji (którą opiszę nieco później) i muszę przyznać, iż wygląda on bardzo interesująco. W skrócie – Phalanger kompiluje kod PHP do postaci MSIL, używanego przez środowisko CLR, dzięki czemu w banalny wręcz sposób możemy tworzyć “mieszane” aplikacje PHP + .NET.

Według informacji znajdujących się na stronie projektu, Phalanger posiada następujące możliwości:

  • korzystanie z bibliotek stworzonych w PHP przez inne języki platformy .NET
  • możliwość korzystania z bibliotek platformy .NET w kodzie PHP
  • kompilowanie PHP, a co za tym idzie zwiększenie jego wydajności
  • dodanie PHP do Visual Studio jako jednego z wielu dostępnych języków, a co za tym idzie możliwość korzystania z podpowiadania składni oraz debugowania aplikacji

Tyle teorii, a jak to wygląda w praktyce? Poniżej znajduje się przykład zaczerpnięty bezpośrednio z Phalangera. Jest to typowa strona aspx.

<%@ Page Language="PHP" AutoEventWireup="false" CodeFile="Default.aspx.php" Inherits="_Default" Title="Secret page" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Secret page</title>
</head>
<body style="font-family: Arial, Helvetica, sans-serif">
    <form id="form1" runat="server">
        <center>
            <table border="0" cellpadding="0" cellspacing="5">
                <tr>
                    <td style="text-align: center">
                	    You are currently logged in as <b><%= HttpContext::$Current->User->Identity->Name %></b>.
                    </td>
                </tr>
                <tr>
                    <td>
                        This page is protected by
                        <a href="http://msdn.microsoft.com/library/en-us/dnpag2/html/PAGExplained0002.asp?frame=true">Forms Authentication</a>.
                    </td>
                </tr>
                <tr>
                    <td style="text-align: center">
                        <asp:Button ID="ButtonLogout" runat="server" Text="Logout" OnClick="ButtonLogout_Click" />
                    </td>
                </tr>
            </table>
        </center>
    </form>
</body>
</html>

A teraz najzwyklejszy kod PHP (z małym dodatkiem), pełniący rolę code behind dla powyższej strony aspx.

import namespace System;
import namespace System:::Data;
import namespace System:::Configuration;
import namespace System:::Collections;
import namespace System:::Web;
import namespace System:::Web:::Security;
import namespace System:::Web:::UI;
import namespace System:::Web:::UI:::WebControls;
import namespace System:::Web:::UI:::WebControls:::WebParts;
import namespace System:::Web:::UI:::HtmlControls;

partial class _Default extends System:::Web:::UI:::Page
{
	protected function ButtonLogout_Click($sender, $e)
	{
		FormsAuthentication::SignOut();
		FormsAuthentication::RedirectToLoginPage();
	}
}

Jak widać pojawiło się importowanie przestrzeni nazw ze środowiska .NET, nowy operator (:::) oraz klasa częściowa. Nie są to jedyne zmiany, jakie wprowadzone zostały do PHP.

Niestety nie udało mi się uruchomić Phalangera na Visual Studio Express, co za tym idzie nie jestem w stanie w chwili obecnej potwierdzić, czy i jak to działa w rzeczywistości. Jeśli faktycznie można przy pomocy PHP tworzyć aplikacje bezproblemowo “gadające” z dotnetem, wówczas przed PHP otwiera się zupełnie nowy świat.

W każdej beczce miodu musi znaleźć się łyżka dziegciu. Nie inaczej jest w przypadku Phalangera. Na pewno zauważyliście nowy operator (:::). Zdaję sobie sprawę, iż wszystkie inne operatory są już zajęte, ale jakoś dziwnie te trzy dwukropki wyglądają. Bardziej niepokojąco wygląda sprawa z zarezerwowanym słowem namespace. Wprawdzie nie uruchamiamy języka w interpreterze PHP, niemniej korzystanie z zarezerwowanych terminów może spowodować problemy podczas kompilacji aplikacji napisanej w PHP 5.3. Nie dane mi było przetestować jak wygląda kwestia korzystania z Phalangera w Visual Studio, więc nie wiem jak wygląda podpowiadanie składni oraz debuger.

Zainteresowanych Phalangerem odsyłam do strony projektu – http://www.php-compiler.net/

Z kolei na codeplex znajdziecie dokumentację, linki do pobrania projektu oraz do wiki – http://phalanger.codeplex.com/.

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.