Jump to content
GSForum - Segélyvonal

PHP kérdésem van


Recommended Posts

Posted

@jojo19

 

Úgy emlékszem azt olvastam errõl, hogy hibás néhány kód a könyvben, szóval nem a te készülékedben van a hiba.Mindenesetre kérdezz meg hozzáértõket is errõl.

 

A kijavításban nem tudok még segíteni, én is most ismerkedem a Php-vel.

 

Meg a többivel is. 8):D

Posted

@jojo19

Az imagecreate() függvény-t nem ismeri fel az EasyPhp. Ezért okoz hibát. Az olyan scripteket amik ezt a függvényt használják, mindíg felrakom egy netes tárhelyre és ott próbálom ki.

 

Peredi Zoltán
Posted

@jojo19

 

Inkább az a baj, hogy szabadalmi problémák miatt a legtöbb PHP változatból már eltávolították a GIF képek létrehozásának lehetőségét. De például PNG formátumú kép létrehozható az általad írt kóddal:

 

<?php

header("Content-type: image/png");

$kep = imagecreate(200,200);

ImagePng($kep);

?>

 

és pl. az IE ki is rajzolja a 200x200-as területet, amiben még nincs semmi.

 

Ha valami van is a képben (az alanti kód szerint egy háttérszín),

 

<?php

header("Content-type: image/png");

$kep = imagecreate(200,200);

$background_color = ImageColorAllocate ($kep, 0, 250, 0);

ImagePng($kep);

?>

 

akkor már minden böngésző elfogadja, és felrakja a – zöld – négyzetet.

 

Ha pedig a készítendő kép nevét is megadod:

 

<?php

header("Content-type: image/png");

$kep = imagecreate(200,200);

$background_color = ImageColorAllocate ($kep, 250, 0, 0);

ImagePng($kep, 'ujkep.png');

?>

 

akkor akármilyen képmegjelenítő programmal is láthatóvá teheted az ujkep.png nevű - most éppen piros - négyzetet.

Posted

Na, azért akkora gond még nincs. PHP-val nagyon jól kezelhetõ a GIF is. ;)

Peredi Zoltán
Posted

Kezelhető. De nem lehet új képet létrehozni. Legtöbb változatban már nem működik GIF-re az imagecreate().

Posted

Sziasztok!

 

Egy olyan php kódot szeretnék létrehozni, aminek fájlok letöltésénél volna szerepe. Például olyan alkalmazásnál, ahol korlátozni szeretném a hozzáférést. Tehát mondjuk ha a download.php-t a következõ paraméterrel hívom meg: download.php?fajlid=987&jelszo=alma akkor letölthetõ lenne egy fájl. Olyasmi, mint a http://www.hatterkepek.hu oldalon a picdownload.php :nyíl: http://www.hatterkepek.hu/picdownload.php?...9/honda-004.jpg

Posted

Ehhez a legjobb session-t használni. A session változó meglétét ellenőrzöd, ami akkor kap értéket, ha az űrlapba jól írja be a jelszót a letöltő.

 

Amit te írsz az sem rossz, úgy is meg lehet oldani, csak kevésbé biztonságos. Ebben az esetben az $_GET tömbben találod a lekérdező karakterlánc tartalmát (pl. jelszó). Ha ez helyes, akkor megadod a letöltési liket a felhasználónak.

 

Pl. ez a jelszó: gumimaci

És így néz ki a lekérdező karakterlánc: dowload.php?fileid=valami.kit&passwd=gumimaci

Akkor ez a kód (persze addig bővíted, amíg szeretnéd :) ) :

 

<?php
if ( ( isset $_GET['passwd'] ) && (! empty $_GET['passwd'] ) && ( isset $_GET['fileid'] ) && ( ! empty $_GET['fileid'] ) ) {

$file = $_GET['fileid'];
  if (is_file ($file) ) {
    if ( $_GET['passwd'] = 'gumimaci' ) {
      print '<a href="$fajl" target="_self">A letöltéshez kattints ide</a>.';
    } else {
      print 'Nincs elég jogosultságod a letöltéshez!';
    }
  } else {
print 'Az általad kért fájl nem található a szerveren.';
  }
}
?>

 

Ilyesmire gondoltál?

Posted

Huh, ezzel a jelszós dologgal azt hiszem sajnos elvontam a figyelmet az elõl, ami a lényeg lenne. Tehát ha minden stimmel (létezik a fájl, jelszó rendben) akkor nem egy linket szeretnék adni a felhasználónak, ami elvezeti egy titkos helyre (pl. 8d683jkd32/valami.kit, és a webszerveren természetesen tiltva lenna a mappák listázása), hanem magával a php kóddal szeretném átküldeni a fájlt. Kérdésemet elküldtem a www.coffeecup.hu-nak is, és nagy örömömre ma segítõkészen megválaszolták kérdésemet. :) Okulásképpen bemásolom ide is levélváltásunkat (protokollok nélkül), jól jöhet ez még másnak is:

 

Egy php-s fájl készítésekor akadt egy problémám, és Önök tudnának rá segíteni! Rövid leszek: hogyan mûködik a http://www.hatterkepek.hu oldalon a picdownload.php (kép)fájlközvetítése? Tehát ha például meghívom a http://www.hatterkepek.hu/picdownload.php?...awasaki-002.jpg linket, akkor ugye a php elküldi a merevlemez megfelelõ helyérõl (normal/www/Berta/20051007_195640) a kawasaki-002.jpg képfájlt. De vajon ezt milyen kóddal lehet megvalósítani?

 

Szíves segítségüket elõre is köszönöm!

 

A funkció megvalósításához a legegyszerûbb mód a readfile() php függvény meghívása:

http://hu.php.net/readfile

 

Itt lényegében csak meg kell adni egy útvonalat a helyi fájlrendszeren, amely fájlnak a tartalmát a standard kimenetre küldi, böngészés során ez gyakorlatilag maga a böngészõ. Három fontos dologra kell még figyelni.

 

Ha egy JPG fájl tartalmát küldi el egy PHP scripten keresztül, akkor ezt jelezni kell a böngészõnek a megfelelõ HTTP fejléc kiadásával (még a readfile() elõtt):

header('Content-type: image/jpeg');

 

Szintén fontos megmondani a böngészõnek, hogy mekkora fájlt is fog küldeni, illetve mentés során milyen fájlnevet kínáljon fel (ellenkezõ esetben a php script fájlnevét kínálja majd fel, ami meglehetõsen zavaró lehet):

header("Content-length: ".filesize($path));

header("Content-Disposition: attachment; filename=kep.jpg";

 

Komoly biztonsági rést okozhat továbbá egy rosszul beállított szerveren, ha nem ellenõrzi a $_GET tömbben kapott elérési útvonalat. Ilyenkor könnyedén letöltheti az ártó szándékú támadó például egy password fájl tartalmát egy keres.php?file=/etc/passwd formában.

Posted
Kezelhető. De nem lehet új képet létrehozni. Legtöbb változatban már nem működik GIF-re az imagecreate().

Pontosan milyen "változatokra" gondolsz? A PHP-nak nincsenek külön "disztribúciói". :pislog: Vagyis elvileg minden használható, amit a dokumentáció leír. Hogy aztán abból a szolgáltató mennyit telepít/engedélyez, az már más kérdés. az itthoni szerveren nekem tökéletesen működik az 5.2.1-es verzióval.

Peredi Zoltán
Posted

Nem tudom, melyik verzió vagy változat vagy szolgáltató a ludas. Olvastam valahol errõl a GIF problémáról. De tény, hogy itthon (PHP 4.3.6) meg az ATW-n nem fut, az UW-n viszont igen. A PNG-re vonatkozó kód pedig mindhárom helyen rendben.

Posted

Ha ingyenes a szolgáltató nem csodálom, de ha fizetős akkor sem, mert a legújabb stabil Debian-ra még várni kell (abban jelenik meg majd a PHP5), és sok szerver Debian alapú. :S Hallottam a GIF-es vitát, elvileg ezért karolták fel a szabad szoftverek is a PNG-t (arról nem is beszélve, hogy általában jobb). Sajnos kisebb animációk terén a GIF-nek még nincs igazi versenytársa. :hááát: Arról nem is beszélve, hogy amit az IE 6 művelt a PNG-vel, az egyszerűen nevetséges volt. :dühös:

  • 2 weeks later...
Posted

Tök kezdõ vagyok php-ban és azt szeretném megkérdezni hogy egy weboldal php kódját ki lehet-e olvasni valahogy? Csak mert készítettem egy jelszavas védelmet egy pofonegyszerû if ($pass == "jelszó") összehasonlítással és nem tudom mennyire biztonságos. Köszönöm!

Posted

Nem.

A php kód a szerver oldalon lefut, és az user már csak a kimenetet látja.

Posted

Tehát teljesen biztonságos?

Posted

Attól függ mit értesz biztonság alatt.

 

A kódot nem fogják látni. Az 100%. (ezalól kivételt képez a szándékossan megjelenített kódok /* */ illetve //)

 

Posted
Tehát teljesen biztonságos?

Nem. A jelszót ugye valahogy át kell adni a PHP-nak. A HTTP protokoll pedig nem biztonságos, útközben le lehet hallgatni. SSL-kapcsolattal viszont titkosítható. Ennek persze semmi köze a PHP-hez, mert maga a kód semmiképp sem fog látszani. Ellenben nem mindegy, hogy milyen változóban és hogyan kerül a jelszó a kódhoz




			
		
Posted (edited)

Mi lehet a hiba? A hibaüzenet:

Parse error: parse error, unexpected $ in /admin/viccek/viccek.php on line 40

A 40. sor az utolsó.

 

<?
$kapcsolat = mysql_connect('127.0.0.1','xlabor','jelszó');
mysql_select_db('xlabor',$kapcsolat);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
<title>Viccek</title>
<link rel="stylesheet" type="text/css" href="http://www.xlabor.hu/stilus.css" />
</head>
<body>
<p align="center"><font id="focim">Viccek<br /></font></p>
<div style="padding: 10px;">
<?
$parancs = "SELECT * FROM vicc ORDER BY id";
mysql_query($kapcsolat);
$szin = "#f3f2f8";
while ($sor = mysql_fetch_array($eredmeny)) 
{
    if ($szin == "#f3f2f8") 
    {
        $szin = "#f3f2f8";
    }
    else 
    {
        $szin = "#f3f2f8";
?>
<?= $sor["tartalom"] ?>
<br /><br />
<?
} <-- !!! ez az else-é! !!!
?>
</div>
</body>
</html>
<?
mysql_close($kapcsolat);
?>

Forráskód berakásánál, tanuljátok meg használni a code jelölõt!

Edited by Spányik Balázs
Posted

Amikor a lap utolsó sorában van a hiba, legtöbbször egy lezáratlan ciklus van az oldalban. Mint most is.

A while ciklus nincs lezárva.

Továbbá csak kinézet miatt, használd a szabvány formát, mert az igazán jól konfigurált szerverek nem hajtják végre a <? ?> közti scriptet.

Így kellene: <?php ?>

Posted

Kicsit beformáztam, és bejelöltem nyíllal a problémát.

Posted

<?= $sor["tartalom"] ?>

Ezt én nem tudom hová tenni a fenti kódban. Ha ez értékadás, miért kezdõdik egyenlõség-jellel, és ha egy sor, akkor miért nincs a végén pontosvesszõ? :hááát:

 

Kipróbáltam az ftp-függvényeket. Minden jól mûködne, csakhogy... Adott egy form, ahol megadom egy input mezõben a fájl elérési útját (vagy megadja az, aki fel szeretne tölteni). Ezt a fájlt azonban a PHP nem látogató gépén fogja keresni, hanem a szerveren, és nem tölt fel semmit. Ha meg azt írom be az input type-ba, hogy "file", akkor HTTP-n keresztül megy a feltöltés... Tudtok erre valamit, amivel ezt áthidalhatom?

Posted

Köszönöm. Egy hibaüzenet most is van.

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /admin/viccek/viccek.php on line 23

 

@h.arpad

Az egyenlõségjel a jelen esetben a print-tel egyezik meg. (Vagyis ki akarom íratni az adott sor tartalom változóját.)

Posted

@Oke

A lekérdezésednek vagy nincs eredménye, vagy még nem kapcsolódtál az adatbázishod, és ezért nincs eredménye a lekérdezésnek.

 

Ja, meg van.

$parancs = "SELECT * FROM vicc ORDER BY id";
mysql_query($kapcsolat);

 

Mi lenne, ha így lenne?

$parancs = "SELECT * FROM vicc ORDER BY id";
$eredmeny=mysql_query($parancs );

Szerintem jobban érezné magát a while ciklus is.

:lol:

Posted

Az egyenlõségjel a jelen esetben a print-tel egyezik meg. (Vagyis ki akarom íratni az adott sor tartalom változóját.)

Hát ezt hol tanultad? Csak azért kérdezem, mert nálam nem mûködik. Igaz, hibát sem kapok. :upsz:

Posted

@h.arpad

Az Oktatóvideókból. :D

 

@Mezofi

Köszönöm. Mûködik.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...