PHP-ongelmat

Muu yhteisön välinen keskustelu.
User avatar
Jare
Devoted Member
Posts: 877
Joined: Mon Aug 27, 2007 10:18 pm
Location: Pori
Contact:

Re: PHP-ongelmat

Post by Jare »

Tuxi wrote: En vain vieläkään tiedä käytössä olevan PHPn versiota. ( "<?php phpinfo() ?>" näytti tyhjää.)
phpinfo() saattaa olla estettynä kyseisellä palvelimella. Kysy palvelimen ylläpitäjältä, mikä PHP:n versio on käytössä.
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: PHP-ongelmat

Post by Jani »

Tuxi wrote:Sain sen latauslaskurin kuntoon.
Syynä oli "Mars1005.txt"-tiedoston virheelliset käyttöoikeudet.

En vain vieläkään tiedä käytössä olevan PHPn versiota. ( "<?php phpinfo() ?>" näytti tyhjää.)
Sehän on näin:

Code: Select all

<?php phpinfo(); ?>
eli muista tuo ;-merkki!

En ole varma että toimiiko koska en voi php:tä käyttää.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: PHP-ongelmat

Post by Koodiapina »

Eihän sitä puolipistettä tarvita, jos on vain yksi rivi. Kyllähän yksirivinen CoolBasic-koodikin toimii, vaikka siinä ei olisi rivinvaihtoa lopussa.
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: PHP-ongelmat

Post by Jani »

Grandi wrote:Eihän sitä puolipistettä tarvita, jos on vain yksi rivi. Kyllähän yksirivinen CoolBasic-koodikin toimii, vaikka siinä ei olisi rivinvaihtoa lopussa.
mitä yhteistä on CB:llä ja PHP:llä? :roll:
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: PHP-ongelmat

Post by Koodiapina »

Molemmissa kielissä koodirivit pitää erottaa toisistaan.
Pettis
The Evil Admin
The Evil Admin
Posts: 1044
Joined: Sun Aug 26, 2007 5:08 pm
Location: Rovaniemi
Contact:

Re: PHP-ongelmat

Post by Pettis »

Monet palveluntarjoajat estävät mahdollisesti haittaavan tiedon levittämisen ja selvittämisen palvelimillaan. Jos esimerkiksi kotisivutila on täysin ilmaista on fiksua estää tarkkojen versiotietojen näkyminen, jotta haxorit eivät tiedä suoriltaan että mitä versiota vastaan heidän tulisi hyökätä. Tällä tavoin myös estetään lisäosien ja niiden haavoittuvuuksien selvittäminen helposti. Harvemmin olen kuullut että phpinfo olisi estetty maksullisissa alustoissa.

Monesti myös estetään erilaiset suorituskomennot ja rajataan käyttäjän oikeudet kotihakemistoonsa. Ihan vain tietoturvan nimissä.

Itse kyllästyin näihin rajoituksiin jossain vaiheessa ja siirryin itse ylläpidettyyn vuokrapalvelimeen jotta halutut ominaisuudet toimivat tai saadaan ainakin haluttaessa toimimaan.

Kotikoneellakin sitä PHP:tä voi helposti testailla ja kehitellä. Itseasiassa paremminkin kuin esimerkiksi jonkun kankean internet-yhteyden ylitse tai webbikäyttöliittymällä. Itse suosittelen käyttämään EasyPHP:tä. Tämä asentaa kokonaisen toimivan palvelinsetin (Apache, MySQL, PHP ja PHPMyADmin) koneelle joka ei (muistaakseni) oletuksena näy ulospäin ja ei ole koko aikaa päällä eikä asentele mitään servicejä koneeseen kuten esimerkiksi XAMPP ja vastaavat.

Koska suuri osa palvelimista on Linux-pohjaisia, niin toki kehitys Linux-alustalla on sinänsä parempi vaihtoehto, koska ne koodit ja oikeudet ei toimi ihan samalla tavalla kuin Windows-maailmassa. Itse kuitenkin vielä PHP:tä aktiivisesti koodaillessani tein sivut lokaalisti Windows-koneellani ja siirsin valmistuttua internetiin.
CB Repository .com - Sinne ne kaikki koodit menneet on!
MunVerkko - Ilmaisia foorumeita ja blogeja
User avatar
Jare
Devoted Member
Posts: 877
Joined: Mon Aug 27, 2007 10:18 pm
Location: Pori
Contact:

Re: PHP-ongelmat

Post by Jare »

Pettis wrote:Harvemmin olen kuullut että phpinfo olisi estetty maksullisissa alustoissa.
Elisan Yrityswebissä tuo on estetty.
Pettis wrote: Kotikoneellakin sitä PHP:tä voi helposti testailla ja kehitellä. Itseasiassa paremminkin kuin esimerkiksi jonkun kankean internet-yhteyden ylitse tai webbikäyttöliittymällä. Itse suosittelen käyttämään EasyPHP:tä. Tämä asentaa kokonaisen toimivan palvelinsetin (Apache, MySQL, PHP ja PHPMyADmin) koneelle joka ei (muistaakseni) oletuksena näy ulospäin ja ei ole koko aikaa päällä eikä asentele mitään servicejä koneeseen kuten esimerkiksi XAMPP ja vastaavat.
Itse olen havainnut yleensä helpoimmaksi sen, että kehitän sivut suoraan kohdepalvelimelle, jotta kaikki yhteensopivuusongelmat tulee heti ilmi. Kotikoneella olevan PHP:n versio saattaa kuitenkin olla eri kuin kohdepalvelimella. Kirjoitan sivut Notepad++:lla, jonka mukana tulee jo oletusarvoisesti lisäosa, joka osaa tallentaa ohjelmalla käsitellyt tiedostot FTP:n yli palvelimelle kun tallentaa tiedoston. Tämän ansiosta suoraan palvelimelle kehittäminen ei ole sen vaikempaa kuin PHP:n ajaminen kotikoneella (jos vain palvelimen ominaisuudet ovat omaan käyttöön sopivat). Tietokantaa taas käytän palvelimen ylläpidon asentamalla PhpMyAdminnilla, mikä on osoittautunut onnistuneeksi ratkaisuksi.
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: PHP-ongelmat

Post by Sami345 »

Jani wrote:
Wee (offline) wrote:Mitäpä vikaa jouluserverissä on?

Ilmaiset 100(+)mb tilaa, kaistarajoitus tais olla 1gb/kk, sisältää 1 mysql tietokannan, php:n luonnollisesti (versio tais olla 4 tai 5), ja muuta pientä härpäkettä =). Ja netftp on ihan toimiva oman ftpohjelman rinnalla. Kattokaa nuo tiedot tarkemmin jouluserver.com:ista...
Ja et saa sieltä osoitetta :evil:
Kyllä saa, jos osaa perustella.
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
User avatar
Ruuttu
Devoted Member
Posts: 688
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: PHP-ongelmat

Post by Ruuttu »

Okei, jos mä haluaisin että kun naputtelet selaimeesi osoitteen "rudi.arkku.net/linkkiruletti.php", selaimesi siirtyy 50:n URL:n listasta satunnaisesti valitulle sivulle, niin minkäslainen php -scripti siihen tarvittaisiin?

Olen koettanut ovelasti yhdistää tätä...

Code: Select all

<?php
$random_text = array("Random Text 1",
                    "Random Text 2",
                    "Random Text 3",
                    "Random Text 4",
                    "Random Text 5");
srand(time());
$sizeof = count($random_text);
$random = (rand()%$sizeof);
echo "$random_text[$random]";
?>
...ja tätä...

Code: Select all

<script type='text/javascript'>location.href='THE URL GOES HEER!';</script>";
...koodia toisiinsa, mutta koska en ole koskaan elämässäni koskenutkaan php -koodiin (mitä nyt kääntänyt valmiita php -scriptejä suomenkielelle) minulla ei ole hajuakaan, miten se tehdään.
EDIT:

Tarkemmin ajateltuna noita kahta koodia ei varmaan kannattaisikaan yhdistää, vaan helpommalla pääsisi kun suunnittelisi nimenomaista tarkoitusta varten oman scriptin.

Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: PHP-ongelmat

Post by Koodiapina »

Code: Select all

<?php
$random_text = array("Random Text 1",
                    "Random Text 2",
                    "Random Text 3",
                    "Random Text 4",
                    "Random Text 5");
echo "<script type='text/javascript'>location.href='".$random_text[rand(0,count($random_text))]."';</script>";
?>
Tuon pitäisi toimia. En kyllä ole testannut koodia, joten mitään takeita en anna.
User avatar
Ruuttu
Devoted Member
Posts: 688
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: PHP-ongelmat

Post by Ruuttu »

Ja sehän toimii. Kiitos! ;)
EDIT:

OK, kiitos.

Last edited by Ruuttu on Thu Feb 19, 2009 1:45 pm, edited 1 time in total.
User avatar
Jare
Devoted Member
Posts: 877
Joined: Mon Aug 27, 2007 10:18 pm
Location: Pori
Contact:

Re: PHP-ongelmat

Post by Jare »

Code: Select all

<?php
$random_text = array("Random Text 1",
                    "Random Text 2",
                    "Random Text 3",
                    "Random Text 4",
                    "Random Text 5");
header("Location: ".$random_text[rand(0,count($random_text))]);
?>
Tämä toimii paremmin, koska JavaScript ei välttämättä ole kaikilla käytössä. Muista http:// jokaisen osoitteen alkuun! ;)
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: PHP-ongelmat

Post by Koodiapina »

Joo, tuo header()-funktio on tosiaan parempi kuin JavaScript-kikkailut. Kannattaa kuitenkin muistaa, että tuon header-rivin pitää olla ennen kuin yhtään riviä merkkauskieltä on tungettu sivulle. Tämä oli muinoin ainakin itselläni ongelmana.
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: PHP-ongelmat

Post by esa94 »

Ei, vaan header-funktiota (proseduuria?) voi käyttää vain ennen headereiden lähettämistä (<head> vinkvink </head> )
zHelmet
Member
Posts: 73
Joined: Mon Nov 10, 2008 3:55 pm

Re: PHP-ongelmat

Post by zHelmet »

esa94 wrote:Ei, vaan header-funktiota (proseduuria?) voi käyttää vain ennen headereiden lähettämistä (<head> vinkvink </head> )
Pakko päästä pätemään suoraan php.netin sivuilta:

Code: Select all

<?php
ob_start();
header("location: 1.html");
echo "send data";
header("location: 2.html"); //replaces 1.html
ob_end_flush(); //now the headers are sent
?>
Eli on mahollista.
User avatar
Jare
Devoted Member
Posts: 877
Joined: Mon Aug 27, 2007 10:18 pm
Location: Pori
Contact:

Re: PHP-ongelmat

Post by Jare »

zHelmet wrote:Pakko päästä pätemään suoraan php.netin sivuilta:
Linkki kyseiseen koodin olis kiva, jos kerran suoraan lainataan. :S
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: PHP-ongelmat

Post by esa94 »

zHelmet wrote:
esa94 wrote:Ei, vaan header-funktiota (proseduuria?) voi käyttää vain ennen headereiden lähettämistä (<head> vinkvink </head> )
Pakko päästä pätemään suoraan php.netin sivuilta:

Code: Select all

<?php
ob_start();
header("location: 1.html");
echo "send data";
header("location: 2.html"); //replaces 1.html
ob_end_flush(); //now the headers are sent
?>
Eli on mahollista.
Excuse me, mitä yrität päteä? Sanoin vain, että header() on käytettävissä vain ennen headerien lähettämistä, joka kivasti hoidetaankin tuossa sinun koodissasi, kuten kommenttikin sanoo. Lisävinkvink tarkoitti vain sitä, että <head>-tageillahan ne headerit HTMLssä lähetetään.
zHelmet
Member
Posts: 73
Joined: Mon Nov 10, 2008 3:55 pm

Re: PHP-ongelmat

Post by zHelmet »

esa94 wrote:
zHelmet wrote:
esa94 wrote:Ei, vaan header-funktiota (proseduuria?) voi käyttää vain ennen headereiden lähettämistä (<head> vinkvink </head> )
Pakko päästä pätemään suoraan php.netin sivuilta:

Code: Select all

<?php
ob_start();
header("location: 1.html");
echo "send data";
header("location: 2.html"); //replaces 1.html
ob_end_flush(); //now the headers are sent
?>
Eli on mahollista.
Excuse me, mitä yrität päteä? Sanoin vain, että header() on käytettävissä vain ennen headerien lähettämistä, joka kivasti hoidetaankin tuossa sinun koodissasi, kuten kommenttikin sanoo. Lisävinkvink tarkoitti vain sitä, että <head>-tageillahan ne headerit HTMLssä lähetetään.

Code: Select all

<?php
ob_start();
echo "<html><head><title>asd</title></head><body>asd</body></html>";
header("location: 2.html"); //replaces 1.html
ob_end_flush(); //now the headers are sent
?>
Esim tuo toimii moitteettomasti vaikka <head> tagi määritellään ennen header():ia. Eli Header() toimii myös <head> tagin jälkeen.
EDIT:

http://fi2.php.net/header Tuolta kaivoin tuon Jare

m1c
Member
Posts: 65
Joined: Tue Aug 28, 2007 5:10 pm
Location: \o

Re: PHP-ongelmat

Post by m1c »

esa94 wrote:
zHelmet wrote:
esa94 wrote:Ei, vaan header-funktiota (proseduuria?) voi käyttää vain ennen headereiden lähettämistä (<head> vinkvink </head> )
Pakko päästä pätemään suoraan php.netin sivuilta:

Code: Select all

<?php
ob_start();
header("location: 1.html");
echo "send data";
header("location: 2.html"); //replaces 1.html
ob_end_flush(); //now the headers are sent
?>
Eli on mahollista.
Excuse me, mitä yrität päteä? Sanoin vain, että header() on käytettävissä vain ennen headerien lähettämistä, joka kivasti hoidetaankin tuossa sinun koodissasi, kuten kommenttikin sanoo. Lisävinkvink tarkoitti vain sitä, että <head>-tageillahan ne headerit HTMLssä lähetetään.
Headerihan meinaa yleisesti sitä oikeaa informaatiota edeltävää osaa, mutta HTML:n <head>-tagissa ei ole kyse aivan samasta asiasta kuin mistä nyt on puhe. Nekin toimivat headerina, mutta ennemminkin sivun sisällön kannalta. PHP:llä lähetettävät headerit tulevat suoraan HTTP-vastauksen alkuun(vastaavantyyppiset löytyvät myös pyynnöstä). Ideana on, että kaikki headerit on oltava lähetettynä ennen varsinaista sisältöä, jotta selain tietää mitä odottaa.

Tämähän tietysti sisältää ne head-tagit, mutta niin kaiken muunkin. Yhtäkään tavua yhtään mitään muuta ei saa olla lähetettynä.

zHelmetin esimerkkikoodissa pistetään outputbufferin päälle, jolloin echoa käytettäessä "send data" menee vain jonoon. Sen sijaan headerit lähetetään kuten normaalisti. Huomioitavaa on myös, että skriptissä lähetetään kahdet uudelleenohjausheaderit. Selain ohjautuu jälkimmäiseen, koska myöhemmin tullut tieto korvaa vanhemman.

zHelmetin toisessa esimerkissä myöskin lausemuoto "Eli Header() toimii myös <head> tagin jälkeen." on hassusti valittu, sillä vaikka puskuriin echotaankin tavaraa, ei sitä silti lähetetä kun vasta ob_end_flushia kutsuttaessa, jota ennen headerit on jo lähetetty.
Pettis
The Evil Admin
The Evil Admin
Posts: 1044
Joined: Sun Aug 26, 2007 5:08 pm
Location: Rovaniemi
Contact:

Re: PHP-ongelmat

Post by Pettis »

Heitänpä minäkin oman lusikkani soppaan.

Yleisesti aloittelevilla nettisivujen kehittäjillä on ongelmia esimerkiksi merkistökoodauksen kanssa. Vaikka he laittavat sivuillensa head-tagien väliin merkinnän että sisältö on UTF-8:aa saattaa palvelin jolla sivut on lähettää kuitenkin selaimelle headerin joka sanoo että sivut on ISO-8859-15:ttä. Tämä headeri ei minnekkään HTML-koodiin tule näkyville, mutta silti se tieto selaimelle välitetään. Samoin palvelin välittää monia muitakin headereita joka sivulatauksella. Esimerkiksi palvelin kertoo selaimelle, että tämä tiedosto on HTML-tiedosto vaikka sen pääte nyt onkin vaikkapa se .php tai vaikka .jotain. Headerit sen määrää että minkä tyyppisenä tiedostona selain sen tiedoston näyttää. PHP-koodin saa näkymään vaikkapa kuvana lähettämällä sopivan headerin selaimelle.

Siinä olette kyllä oikeassa, että PHP-koodissa nuo headerit pitää lähettää ennen sisältöä. Sisällöksi kuitenkin lasketaan kaikki HTML-koodin tulosteet. Jos siis sinne koodiin lipsahtaa esim. välilyönti PHP-tiedoston alkuun, saattaa tulla virheilmoitusta koska tämä välilyönti lähetetään selaimelle ennen tulevaa koodia. Nämä PHP-headerit eivät nekään ilmesty minnekään sinne HTML-koodin sekaan vaan ne ovat eräänlaista metatietoa ladattavasta sivusta / tiedostosta.

Itse teen webbikehitystä paljon ja siksi noita headeritietojakin tulee seurailtua välillä. Yksi hyvä FireFox-plugin tuohon hommaan on esimerkiksi Live HTTP Headers. Pistäkää se päälle ja ladatkaa jokin sivu niin näette että sitä headeridataa vilisee kohtuullisesti. Siellä näkyy mm. palvelimen tiedot ja läjä versionumeroita yms. jos tietoturva on heikko.
CB Repository .com - Sinne ne kaikki koodit menneet on!
MunVerkko - Ilmaisia foorumeita ja blogeja
Post Reply