Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Proč není PHP pro ubuntu s bundled  (Přečteno 1428 krát)

josefff

  • Návštěvník
  • Příspěvků: 30
Proč není PHP pro ubuntu s bundled
« kdy: 16 Ledna 2012, 18:07:59 »
Zdravím, nevíte někdo proč není PHP pro Ubuntu kompilováno s bundled? Díky tomu není možné používat spousty zajímavých funkcí s obrázky. Bohužel to nelze jednoduše přidat jako třeba GD a je nutné překomlilovat celé PHP, což mi přijde spousty práce (nejsem v tom moc zběhlý). Takže prosím o radu zda je to možné nějakým jednoduchým způsobem vyřešit? Díky za rady (popřípadě prosím o vysvětlení proč to tam není a zda se to chystá? Nebo odkaz kde to najdu)

ETNyx

  • Aktivní člen
  • *
  • Příspěvků: 425
Re:Proč není PHP pro ubuntu s bundled
« Odpověď #1 kdy: 16 Ledna 2012, 19:50:06 »
Bude to tím, že php-gd (bundled) ma funkce které nejsou v knihovně gd podporované (respektive vyvojáři php je nedaly/nezaslaly/neprošly do gd, ať už to není z lenosti, špatné dokumentace nebo bezpečnostních důvodu). Díky tomu že balíky Ubuntu jsou založený na Debianu, kde by takovouhle věc "zavetovaly" týmy security nebo ftp-master a to díky docela striktní politice, tak to není v Ubuntu. Takže se to podle mně ani nechystá

Pokud je chceš tak si je buď sám zkompiluješ nebo použij nějaký neoficiální repositář aby se neřeklo jeden jsem našel http://www.maxiwebs.co.uk/gd-bundled/.

A ještě jedno řešení,... Mělo by jít napsat přepis těch funkcí v php a includovat si je ve svých projektech, podle mně takovéhle funkce budou v diskuzích na php.net pod oněmi funkcemi, dost často i s nějakou třešničkou v podobě rozšířené funkcionality, jen to bude víc žrát než když to bude zakompilovaný :-) Tak pro mega projekty asi nee :-)
jabber: etnyx@jabbim.cz

josefff

  • Návštěvník
  • Příspěvků: 30
Re:Proč není PHP pro ubuntu s bundled
« Odpověď #2 kdy: 16 Ledna 2012, 21:19:22 »
Děkuji za objasnění situace, tak to vypadá že asi bude nejlepší ten neofiko repozitář. Díky za typ, zkusím to. Mimochodme ani nevím že v PHP lze přepisovat funkce? Skoda ze to nejde nějak s garancí no. No jsem si to i jednou zkompiloval dělal jsem to asi 4 hodiny a vše fungovalo OK, pak jsem dal apt-get upgrade a bylo to zase vše zpátky :-D myslel jsem že mě klepne... Ještě se zeptám takto... jak jsi našel ten repozitář? Je to někde pokupě nebo prostě google... Já jen na kterej se můžu alespon trochu spolehnout... Dik!

ETNyx

  • Aktivní člen
  • *
  • Příspěvků: 425
Re:Proč není PHP pro ubuntu s bundled
« Odpověď #3 kdy: 16 Ledna 2012, 22:10:22 »
jj jen google lmgtfy.com/?q=php-gd+bundles

já osobně se na externí repositáže nespoléhám vůbec -> žádný externí nepoužívám (no nevěřím ani oficiálním, ale co někde ten SW brát musíme ne? a oficiální jsou ty kterým by se mělo dát trošku věřit).

Co se týká té kompilace a následného upgrade tak by mělo jednoduše stačít použit
Kód: [Vybrat]
aptitude hold nazev_baliku nicméně si pak člověk musí dávat větší pozor na závyslosti dalších balíku a případně překompilovat znovu,... (a nebo je to keep?? teďka z hlavy nevim přesně, spíš hold,....), určitě na to koukni do manuálu


No přepisovat zrovna ne ale prostě sjem si vytvořil funkci která plní stejný účel a třeba i neco na víc. Důležitý je aby tam nevznikali nějaký konflikty, tak to vyřešit třeba takto

Kód: [Vybrat]
if (!function_exists("imagerotate")) { //nemam k dispozici funkci imagerotate()??
    include_once(LIB_DIR."/imagerotate.php"); //nevadí použiju tu svoji
}
$im = imagerotate($im, 55);

a v imagerotate.php bude (jedna se o c&p z php.net)
Kód: [Vybrat]
    function imagerotate ($image, $angle)
    {
        if ( ($angle < 0) || ($angle > 360) )
        {
            exit ("Error, angle passed out of range: [0,360]");
        }
       
        $width    = imagesx ($image);
        $height    = imagesy ($image);
       
        $dstImage = imagecreatetruecolor ($width, $height);
       
        if ( ($angle == 0) || ($angle == 360) )
        {
            // Just copy image to output:
            imagecopy ($dstImage, $image, 0, 0, 0, 0, $width, $height);
        }
        else
        {
            $centerX = floor ($width / 2);
            $centerY = floor ($height / 2);
           
            // Run on all pixels of the destination image and fill them:
            for ($dstImageX = 0; $dstImageX < $width; $dstImageX++)
            {
                for ($dstImageY = 0; $dstImageY < $height; $dstImageY++)
                {
                    // Calculate pixel coordinate in coordinate system centered at the image center:
                    $x = $dstImageX - $centerX;
                    $y = $centerY - $dstImageY;
                   
                    if ( ($x == 0) && ($y == 0) )
                    {
                        // We are in the image center, this pixel should be copied as is:
                        $srcImageX = $x;
                        $srcImageY = $y;
                    }
                    else
                    {
                        $r = sqrt ($x * $x + $y * $y); // radius - absolute distance of the current point from image center

                        $curAngle = asin ($y / $r); // angle of the current point [rad]
                       
                        if ($x < 0)
                        {
                            $curAngle = pi () - $curAngle;
                        }
                       
                        $newAngle = $curAngle + $angle * pi () / 180; // new angle [rad]

                        // Calculate new point coordinates (after rotation) in coordinate system at image center
                        $newXRel = floor ($r * cos ($newAngle));
                        $newYRel = floor ($r * sin ($newAngle));
                       
                        // Convert to image absolute coordinates
                        $srcImageX = $newXRel + $centerX;
                        $srcImageY = $centerY - $newYRel;
                    }
                   
                    $pixelColor = imagecolorat  ($image, $srcImageX, $srcImageY); // get source pixel color
                   
                    imagesetpixel ($dstImage, $dstImageX, $dstImageY, $pixelColor); // write destination pixel
                }
            }
        }
       
        return $dstImage;
    }

takže pokud budu mít php zkompilovany s imagerotate tak se použije vnitřní funkce php pokud ji ale nemám tak se použije náhrada viz imagerotate.php
« Poslední změna: 16 Ledna 2012, 22:12:15 od ETNyx »
jabber: etnyx@jabbim.cz

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5057
    • Lomítkáři
Re:Proč není PHP pro ubuntu s bundled
« Odpověď #4 kdy: 17 Ledna 2012, 08:08:08 »
Pro přepis funkcí se používá klasické override viz.
http://php.net/manual/en/function.override-function.php
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

ETNyx

  • Aktivní člen
  • *
  • Příspěvků: 425
Re:Proč není PHP pro ubuntu s bundled
« Odpověď #5 kdy: 18 Ledna 2012, 09:47:42 »
Čistě osobně tyto praktiky nemám rád, z vlastní zkušenosti vím jaký to dokáže nadělat zmatek, hlavně v případě pokud na projektu pracuje více lidí na různých úrovních.
jabber: etnyx@jabbim.cz

 

Provoz zaštiťuje spolek OpenAlt.