[php] Waarom lukt het mij niet om deze string te gebruiken?*

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Eusebius
  • Registratie: November 2001
  • Niet online
Dit is de standaard (deel) code
static.php
code:
1
2
3
4
5
6
7
$dir = 'content/foobar/';
    
if ( file_exists( 'content/foobar/' . $entry_id . '.txt' ) ) {
$filename = 'content/foobar/' . $entry_id . '.txt';
} elseif ( file_exists( 'content/foobar/' . $entry_id . '.txt.gz' ) ) {
$filename = 'content/foobar/' . $entry_id . '.txt.gz';
}
Een directory wordt gedefinieerd. Daar staat de content in. Nu wil ik dat extern regelen, via een config bestand. Ik heb dus gemaakt config.php
code:
1
$location = "content/foobar/";

En vervang ik content/foobar/ in static.php door $location. Natuurlijk wordt de config.php met
code:
1
require ('config/config.php');

ingelezen.

Toch werkt dit niet ... Als ik static.php gewoon alles laat staan (content/foobar/) en een file aanroep met static.php?page=test dan komt ie mooi naar voren. Op het moment dat ik de content directory via de string aanroep, blijft het wit. Nu heb ik al even een test file gedaan
code:
1
2
3
4
<?php
require('config/config.php');
echo $location ;
?>

Deze geeft wel netjes als output content/foobar/

==
hoi


Acties:
  • 0 Henk 'm!

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 16:37

Basszje

Reisvaap!]

Laat de code eens zien als je van $location gebruik maakt, want het lijkt mij dat je iets simpels over het hoofd ziet?

En die $dir variabele wordt zo niet gebruikt ;)

[ Voor 19% gewijzigd door Basszje op 31-10-2005 13:45 ]

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

En geef de code nu eens die je hebt aangepast?
Heb je toevallig er dit van gemaakt?:
PHP:
1
if ( file_exists( '$location' . $entry_id . '.txt' ) ) {

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

* TAAL in topictitel

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

* Creepy mept .oisyn.. doe eens niet zo snel? ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

/ geeft een escape sequense aan in PHP probeer eens een dubbel / (dus //) te gebruiken.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op maandag 31 oktober 2005 @ 13:50:
/ geeft een escape sequense aan in PHP probeer eens een dubbel / (dus //) te gebruiken.
Onzin.

Binnen single quotes mag en kan je geen codes escape-n. O-)

Maar zonder meer info van de TS is het koffie dik kijken....

[ Voor 11% gewijzigd door LuCarD op 31-10-2005 13:53 ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Eusebius
  • Registratie: November 2001
  • Niet online
Basszje schreef op maandag 31 oktober 2005 @ 13:44:
Laat de code eens zien als je van $location gebruik maakt, want het lijkt mij dat je iets simpels over het hoofd ziet?

En die $dir variabele wordt zo niet gebruikt ;)
Ja, idd die $dir wordt alleen gedefinieerd, maar verder niet gebruikt ... ik heb m ff uitgeschakeld. Dit is dus een gedeelte van het bestand.

code:
1
2
3
4
5
6
7
8
        // $dir = '$location';
    
        
        if ( file_exists( '$location' . $entry_id . '.txt' ) ) {
            $filename = '$location' . $entry_id . '.txt';
        } elseif ( file_exists( '$location' . $entry_id . '.txt.gz' ) ) {
            $filename = '$location' . $entry_id . '.txt.gz';
        }


Ik zie dat ik hier '$location' heb > dat moet toch $location zijn, zonder de ' ...' ? Maar ook zonder werkt ie niet

==
hoi


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Eusebius schreef op maandag 31 oktober 2005 @ 13:53:
[...]


Ja, idd die $dir wordt alleen gedefinieerd, maar verder niet gebruikt ... ik heb m ff uitgeschakeld. Dit is dus een gedeelte van het bestand.

code:
1
2
3
4
5
6
7
8
        // $dir = '$location';
    
        
        if ( file_exists( '$location' . $entry_id . '.txt' ) ) {
            $filename = '$location' . $entry_id . '.txt';
        } elseif ( file_exists( '$location' . $entry_id . '.txt.gz' ) ) {
            $filename = '$location' . $entry_id . '.txt.gz';
        }


Ik zie dat ik hier '$location' heb > dat moet toch $location zijn, zonder de ' ...' ? Maar ook zonder werkt ie niet
- Haal die single quotes weg om location.
- doe eens een echo voordat je de if structure in gaat

PHP:
1
2
3
4
5
6
7
error_reporting(E_ALL);
echo $location . $entry_id . '.txt';
    if ( file_exists($location . $entry_id . '.txt' ) ) {
            $filename = $location . $entry_id . '.txt';
        } elseif ( file_exists( $location . $entry_id . '.txt.gz' ) ) {
            $filename = $location . $entry_id . '.txt.gz';
        }


Probeer dit eens...

[ Voor 25% gewijzigd door LuCarD op 31-10-2005 13:56 ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

LuCarD schreef op maandag 31 oktober 2005 @ 13:52:
[...]


Onzin.

Binnen single quotes mag en kan je geen codes escape-n. O-)
Onzin, binnen single quotes kan en mag je de ' en \ escapen. Daarnaast is de escape-char uiteraard \, en niet / zoals kipbanaan opmerkte :)

[ Voor 14% gewijzigd door .oisyn op 31-10-2005 13:55 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

LuCarD schreef op maandag 31 oktober 2005 @ 13:52:
[...]


Onzin.

Binnen single quotes mag en kan je geen codes escape-n. O-)

Maar zonder meer info van de TS is het koffie dik kijken....
Ow jah single Quotes, dom van me 8)7
Tuurlijk lette ik weer niet op '\' is het escape teken niet '/'...ik zeg niks meer vandaag :o

[ Voor 16% gewijzigd door Verwijderd op 31-10-2005 13:59 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Creepy schreef op maandag 31 oktober 2005 @ 13:45:
En geef de code nu eens die je hebt aangepast?
Heb je toevallig er dit van gemaakt?:
PHP:
1
if ( file_exists( '$location' . $entry_id . '.txt' ) ) {
Vies, maar zou toch niet uit mogen maken?

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

.oisyn schreef op maandag 31 oktober 2005 @ 13:54:
[...]


Onzin, binnen single quotes kan en mag je de ' en \ escapen. Daarnaast is de escape-char uiteraard \, en niet / zoals kipbanaan opmerkte :)
:o Nooit geweten...

Nooit nodig gehad ook, maar dat is een ander verhaal... :D

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Eusebius
  • Registratie: November 2001
  • Niet online
Krijg ik terug:

Notice: Undefined variable: location in C:\www\blog\scripts\scms_sb_static.php on line
test.txt
Notice: Undefined variable: location in C:\www\blog\scripts\scms_sb_static.php on line 2

Notice: Undefined variable: location in C:\www\blog\scripts\scms_sb_static.php on line 4

Notice: Undefined variable: filename in C:\www\blog\scripts\scms_sb_static.php on line 16

Waarbij
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
echo $location . $entry_id . '.txt';
    if ( file_exists($location . $entry_id . '.txt' ) ) {
            $filename = $location . $entry_id . '.txt';
        } elseif ( file_exists( $location . $entry_id . '.txt.gz' ) ) {
            $filename = $location . $entry_id . '.txt.gz';
        }

/*

        if ( file_exists( $location . $entry_id . '.txt' ) ) {
            $filename = $location . $entry_id . '.txt';
        } elseif ( file_exists( $location . $entry_id . '.txt.gz' ) ) {
            $filename = $location . $entry_id . '.txt.gz';
        }
*/  
        $blog_entry_data = static_entry_to_array( $filename );


geknipt uit groter geheel ... vandaar dat ik de regelnummers ff heb aangepast.

Als ik kijk naar de locatie waar het config bestand staat, dan werkt daar alles goed. Ik heb nl ff gekeken of ik niet de verkeerde locatie opgeef. Ik heb dus ff config/config.php in ../config/config.php veranderd, omdat het bestand zelf vanaf de root in /scripts staat. Maar toen gaf ie gelijk een foutmelding dat hij het bestand niet kon vinden. Ik kan er dus vanuit gaan, dat de localisatie ok is.

[ Voor 19% gewijzigd door Eusebius op 31-10-2005 14:09 ]

==
hoi


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Gebruik je location binnen een functie?

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Eärendil
  • Registratie: Februari 2002
  • Laatst online: 21:35
Verwijderd schreef op maandag 31 oktober 2005 @ 13:56:
[...]
Vies, maar zou toch niet uit mogen maken?
Binnen single-quotes worden variabelen niet ingevuld, dat is alleen bij double-quotes:
PHP:
1
2
3
4
5
$string = 'bla';
define('NL',"\n");

echo 'Single: $string' . NL;
echo "Double: $string" . NL;

geeft dit resultaat:
code:
1
2
Single: $string
Double: bla

[ Voor 9% gewijzigd door Eärendil op 31-10-2005 14:12 ]


Acties:
  • 0 Henk 'm!

  • Eusebius
  • Registratie: November 2001
  • Niet online
Hoe bedoel je als in function functienaam ()?

Nee. Location komt alleen als string voor en als woord 1x elders om de header op te roepen
code:
1
header('Location: http://'.$_SERVER['HTTP_HOST'].'/'.$relative_url);

==
hoi


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op maandag 31 oktober 2005 @ 13:56:
[...]

Vies, maar zou toch niet uit mogen maken?
Zoals je waarschijnlijk al had gelezen parsed PHP geen variabelen tussen single quotes ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Eusebius
  • Registratie: November 2001
  • Niet online
Eusebius schreef op maandag 31 oktober 2005 @ 14:05:
[...]


Krijg ik terug:

Notice: Undefined variable: location in C:\www\blog\scripts\scms_sb_static.php on line
test.txt
Notice: Undefined variable: location in C:\www\blog\scripts\scms_sb_static.php on line 2

Notice: Undefined variable: location in C:\www\blog\scripts\scms_sb_static.php on line 4

Notice: Undefined variable: filename in C:\www\blog\scripts\scms_sb_static.php on line 16
Om mijzelf even te quoten:
Als test, om helemaal uit te sluiten dat de undefined variabel idd $location is en niet $entry_id, heb ik alleen echo $location; gedaan. Dit gaf
Notice: Undefined variable: location in C:\www\blog\scripts\scms_sb_static.php on line 52 aan, waarbij regel 52 de regel met echo $location; is

[ Voor 5% gewijzigd door Eusebius op 31-10-2005 14:33 ]

==
hoi


Acties:
  • 0 Henk 'm!

  • Eärendil
  • Registratie: Februari 2002
  • Laatst online: 21:35
Hij bedoelt iets als dit:
PHP:
1
2
3
4
5
6
7
8
$location = 'bla'; // hier krijgt $location een waarde

function doe_iets_met_location() {
  // binnen deze functie is $location niet bekend
  [...]
  $filename = $location . $entry_id . '.txt'; 
  [..]
}


Om $location toch in de functie te gebruiken zijn er een paar opties:

• Als $location één keer een waarde krijgt en nooit veranderd kan je een constante gebruiken:
PHP:
1
2
3
4
5
6
7
define('LOCATION', "waarde");

function doe_iets_met_location() {
  [...]
  $filename = LOCATION . $entry_id . '.txt'; 
  [..]
}

• Je kunt $location een van de parameters maken van de functie:
PHP:
1
2
3
4
5
6
7
8
9
10
$location = 'bla'; // hier krijgt $location een waarde

function doe_iets_met_location($loc) {
  [...]
  $filename = $loc . $entry_id . '.txt'; 
  [..]
}

// aanroep:
doe_iets_met_location($location);

• Je kunt een global gebruiken: (dit is een beetje een smerige oplossing)
PHP:
1
2
3
4
5
6
7
8
$location = 'bla'; // hier krijgt $location een waarde

function doe_iets_met_location() {
  global $location;
  [...]
  $filename = $location . $entry_id . '.txt'; 
  [..]
}

[ Voor 10% gewijzigd door Eärendil op 31-10-2005 14:34 ]


Acties:
  • 0 Henk 'm!

  • Eusebius
  • Registratie: November 2001
  • Niet online
Als het een probleem met het bereik van de variabele zou zijn, waarom zou een echo $location op "0 nivo" (dus buiten / voor een function) dan ook een fout geven?

(ik ga ff testen of ie idd op 0 nivo is)
[edit] als ik echo $location net na de require() doe, dan geeft ie wel netjes het pad weer :-) terwijl hij bij een echo op regel 52 een error geeft (undefined). Dus naar alle waarschijnlijkheid ligt het probleem in het bereik van de variabelen.

Volgens mijn php boek wordt de smerige oplossing zonder verder commentaar aangeboden.

[ Voor 47% gewijzigd door Eusebius op 31-10-2005 14:44 ]

==
hoi


Acties:
  • 0 Henk 'm!

  • Eusebius
  • Registratie: November 2001
  • Niet online
Eärendil schreef op maandag 31 oktober 2005 @ 14:33:
• Als $location één keer een waarde krijgt en nooit veranderd kan je een constante gebruiken:
PHP:
1
2
3
4
5
6
7
define('LOCATION', "waarde");

function doe_iets_met_location() {
  [...]
  $filename = LOCATION . $entry_id . '.txt'; 
  [..]
}

_/-\o_ Deze optie werkte voor mij. In de eerste paar regels heb ik onderstaande code toegevoegd.
code:
1
2
3
require('config/config.php');   // inlezen config.php
echo $location;                 // geeft netjes content/foobar :)
define('LOCATION', $location);  // variabele global maken

Wat ik nu nog niet snap, is waarom de eerste echo het wel doet, en de echo op regel 52 niet ... terwijl ze beide op hetzelfde nivo staan. Of komt dat, omdat tussen de eerste en de tweede echo 2 functions worden uitgevoerd?

Tnx Eärendil ea.

[ Voor 18% gewijzigd door Eusebius op 31-10-2005 14:56 ]

==
hoi

Pagina: 1