[PHP] ge-requirede functions zijn 'undefined'

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb op got gezocht, en wat dingetjes gevonden, maar volgens mij zat de oplossing er niet tussen.

Ik heb een site, die lokaal helemaal werkt (php 4.3.1) maar op de server, (php 4.4.0) helemaal niet.

Het probleem is dat ik 'call to undefined function krijg' als ik een functie aanroep die in functions.php geinclude is.

index.php:
PHP:
1
2
3
4
5
require("./scripts/functions.php");
print_r(get_defined_functions());

require('./scripts/config.php');
require('./header_intro.php');


functions.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
echo "rofl";    
// Extension stripper
function strip_ext($name)
{
$ext = strrchr($name, '.');
if($ext !== false)
{
$name = substr($name, 0, -strlen($ext));
}
return $name;
}
echo "functie test";
echo strip_ext("blaba.php");


resultaat:
----------------------------------
rofl
Array( 'array-met alle functies behalve strip_ext')

Fatal error: Call to undefined function: strip_ext() in /home/users/a/r/arpsnl/public_html/new_site/header_intro.php on line 15
----------------------------

wat opvalt is dat die 'rofl' er wel staat, dus de file wordt wel geinclude, maar vervolgens geeft ie die echo van de functie, die onder de functie zelf staat, niet weer, en de echo "test functie" ook niet.
Dan lijtk het dus dat er iets fout is in die functie, maar dan zou je toch een parse error of notice verwachten? en die zie ik niet, ook niet in de source. Alleen wat notices.

Het lijkt eigenlijk wel alsof ie functions.php parsed ofzo, net zoals bij een remote include, maar dat verklaard nog niet waarom er geen "test functie" geechoed wordt..

En in config.inc staan allemaal vars gedefined, ook die variabelen worden als undefined weer gegegeven

Volgens mij zie ik iets helemaal over het hoofd, maar ik heb me er al op blindgestaard, dus be gentle :)

[ Voor 23% gewijzigd door Verwijderd op 31-01-2006 15:04 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Dan zal der wel een fout zitten in je functie. Zet die eens los in een pagina met error_reporting(E_ALL)

De functie zoals je hem hierboven geeft is overigens niks mis mee..

[ Voor 26% gewijzigd door Bosmonster op 31-01-2006 13:39 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb error_reporting(2047); maar zoals ik al zei, alleen maar notices nix bijzonders, en dat is de functie zoals in de file

als ik gewoon functions.php open in mijn browser, met error_reporting(2047), staat er nog steeds alleen rofl, dat is toch vaag, hij komt niet bij de 2e echo, maar hij geeft geen error

[ Voor 43% gewijzigd door Verwijderd op 31-01-2006 14:17 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

1. Gebruik geen 2047, maar de daarvoor bedoelde constants. Ik en weinigen met mij hebben zin om te gaan zoeken welke waarden horen bij dat getal...

2. Alleen notices, niks bijzonders :? Notices zijn ook niet de bedoeling... welke notices krijg je?

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
In je functions.php heb je hoop ik wel de php open en sluit gags (<??>) welke in je post ontbreken? :Y)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bosmonster schreef op dinsdag 31 januari 2006 @ 14:38:
1. Gebruik geen 2047, maar de daarvoor bedoelde constants. Ik en weinigen met mij hebben zin om te gaan zoeken welke waarden horen bij dat getal...

2. Alleen notices, niks bijzonders :? Notices zijn ook niet de bedoeling... welke notices krijg je?
:| dan zoek ik het wel op http://nl3.php.net/error_reporting 2047 = e_all

notices die er niets me te maken hebben, variabelen die niet gedefined zijn omdat het includen van config.php ook niet lukt

hmm dat had ik meteen moeten melden, dom, in config.inc staan allemaal vars gedefined, ook die variabelen worden als undefined weer gegegeven

en ja ik heb <? ?> anders zou je toch nooit die echo zien??? :|

er moet wel gezegd worden: eerst had ik <?php en toen kreeg ik bij een echo een rare error:
'undefined function phpecho' ofzo, ook nog nooit gezien

edit: dit is de hele functions.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?
error_reporting(2047);
echo "rofl1";   
// Extension stripper
function strip_ext($name)
{
$ext = strrchr($name, '.');
if($ext !== false)
{
$name = substr($name, 0, -strlen($ext));
}
return $name;
}
echo "functie test";
echo strip_ext("blaba.php");

// Wordwrap

function mywordwrap($str, $max = 300, $break = ' ') {
  
  $arr = explode('<a', $str);

  $arr[0] = preg_replace('/([^\s]{'.$max.'})/i',"$1$break",$arr[0]);

  for($i = 1; $i < count($arr); $i++) {

   $arr2 = explode('</a>', $arr[$i]);

   $arr2[1] = preg_replace('/([^\s]{'.$max.'})/i',"$1$break",$arr2[1]);

   $arr[$i] = join('</a>', $arr2);
  }

  return join('<a', $arr);
} 




?>

[ Voor 48% gewijzigd door Verwijderd op 31-01-2006 15:05 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Offtopic, ik vind dit makkelijk lezen (duidelijkere parameters bij substr) en het is misschien ook wel een heel klein beetje efficiënter:
PHP:
1
2
3
4
5
6
7
8
9
function strip_ext($name)
{
  $pos = strrpos($name, '.');
  if($pos !== false)
  {
    $name = substr($name, 0, $pos);
  }
  return $name;
}

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voutloos schreef op dinsdag 31 januari 2006 @ 15:44:
Offtopic, ik vind dit makkelijk lezen (duidelijkere parameters bij substr) en het is misschien ook wel een heel klein beetje efficiënter:
PHP:
1
2
3
4
5
6
7
8
9
function strip_ext($name)
{
  $pos = strrpos($name, '.');
  if($pos !== false)
  {
    $name = substr($name, 0, $pos);
  }
  return $name;
}
ok :)

[ Voor 17% gewijzigd door Verwijderd op 07-02-2006 22:10 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 21:01
Wat gebeurt er als je direct functions.php draait (vanuit de browser of de CLI) en dus niet die andere pagina die 'm requiret? Als het dan ook niet werkt, zit er duidelijk iets fout in dat bestand en hebben overige bestanden er niets mee te maken. Dat maakt het debuggen een stuk eenvoudiger.

Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Verwijderd schreef op dinsdag 31 januari 2006 @ 15:01:
er moet wel gezegd worden: eerst had ik <?php en toen kreeg ik bij een echo een rare error:
'undefined function phpecho' ofzo, ook nog nooit gezien
Die foutmelding lijkt op een end-of-line conversieprobleem tussen *nix en windows machines, kan dat het zijn ?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Soultaker schreef op dinsdag 31 januari 2006 @ 15:50:
Wat gebeurt er als je direct functions.php draait (vanuit de browser of de CLI) en dus niet die andere pagina die 'm requiret? Als het dan ook niet werkt, zit er duidelijk iets fout in dat bestand en hebben overige bestanden er niets mee te maken. Dat maakt het debuggen een stuk eenvoudiger.
paar posts terug zei ik:
als ik gewoon functions.php open in mijn browser, met error_reporting(2047), staat er nog steeds alleen rofl, dat is toch vaag, hij komt niet bij de 2e echo, maar hij geeft geen error
maar zoals ik ook al zei, config.php include ie ook niet, en dat zijn alleen maar droge vars, hoe wou je dat verklaren dan
Die foutmelding lijkt op een end-of-line conversieprobleem tussen *nix en windows machines, kan dat het zijn ?
Goeje vraag, eerlijk gezegd denk ik ook in die richting, hij werkt hier lokaal, op een apache servertje (op windows welliswaar) met PHP 4.3.1, en daar niet op een apache op FreeBSD 5.4-RELEASE-p1 met php 4.4.0
Maar dan weet ik nog niet wat er aan de hand zou zijn of wat er aan te doen

[ Voor 23% gewijzigd door Verwijderd op 31-01-2006 16:09 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 21:01
TheRookie schreef op dinsdag 31 januari 2006 @ 15:54:
[...]

Die foutmelding lijkt op een end-of-line conversieprobleem tussen *nix en windows machines, kan dat het zijn ?
Dat moet het wel haast zijn - het klopt precies met wat er gebeurt.

Ga maar na: het hele script komt op een regel. Alles vanaf de // die eerst op regel 2 stond tot aan het einde van de regel (nu het hele script dus!), wordt gezien als commentaar. Vandaar dat alleen regel 1 wordt uitgevoerd.

@sc0rpz: hexdump dat bestand op de server dan eens, dan kunnen we zien wat voor line endings er in zitten. Het kan ook zijn dat je in Windows al met UNIX line endings werkt (editors als UltraEdit en PHP onder Windows ondersteunen dat gewoon) en een overijverige FTP client ze er later allemaal uitsloopt om een of andere gekke reden. Een ander scenario is dat je de Mac endings gebruikt (0x0D) en binair transfert - dan zitten er natuurlijk helemaal geen UNIX endings (0x0A) in.

[ Voor 34% gewijzigd door Soultaker op 31-01-2006 16:52 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
aha, dat klinkt idd zeer waarschijnlijk, zoals ik al zei, ik snap alleen niet hoe het komt, maar dat terzijde

ik ben niet bekend met hexdump, maar ik neem aan dat dit is wat je zoekt:
(dit is de file van mij computer gehexdumped via een tooltje op een site, is dat ok?)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
0000-0010:  3c 3f 0d 65-72 72 6f 72-5f 72 65 70-6f 72 74 69  <?.error _reporti
0000-0020:  6e 67 28 32-30 34 37 29-3b 0d 65 63-68 6f 20 22  ng(2047) ;.echo."
0000-0030:  72 6f 66 6c-31 22 3b 09-0d 2f 2f 20-45 78 74 65  rofl1";. .//.Exte
0000-0040:  6e 73 69 6f-6e 20 73 74-72 69 70 70-65 72 0d 66  nsion.st ripper.f
0000-0050:  75 6e 63 74-69 6f 6e 20-73 74 72 69-70 5f 65 78  unction. strip_ex
0000-0060:  74 28 24 6e-61 6d 65 29-0d 7b 0d 24-65 78 74 20  t($name) .{.$ext.
0000-0070:  3d 20 73 74-72 72 63 68-72 28 24 6e-61 6d 65 2c  =.strrch r($name,
0000-0080:  20 27 2e 27-29 3b 0d 69-66 28 24 65-78 74 20 21  .'.');.i f($ext.!
0000-0090:  3d 3d 20 66-61 6c 73 65-29 0d 7b 0d-24 6e 61 6d  ==.false ).{.$nam
0000-00a0:  65 20 3d 20-73 75 62 73-74 72 28 24-6e 61 6d 65  e.=.subs tr($name
0000-00b0:  2c 20 30 2c-20 2d 73 74-72 6c 65 6e-28 24 65 78  ,.0,.-st rlen($ex
0000-00c0:  74 29 29 3b-0d 7d 0d 72-65 74 75 72-6e 20 24 6e  t));.}.r eturn.$n
0000-00d0:  61 6d 65 3b-0d 7d 0d 65-63 68 6f 20-22 66 75 6e  ame;.}.e cho."fun
0000-00e0:  63 74 69 65-20 74 65 73-74 22 3b 0d-65 63 68 6f  ctie.tes t";.echo
0000-00f0:  20 73 74 72-69 70 5f 65-78 74 28 22-62 6c 61 62  .strip_e xt("blab
0000-0100:  61 2e 70 68-70 22 29 3b-0d 0d 2f 2f-20 57 6f 72  a.php"); ..//.Wor
0000-0110:  64 77 72 61-70 0d 0d 66-75 6e 63 74-69 6f 6e 20  dwrap..f unction.
0000-0120:  6d 79 77 6f-72 64 77 72-61 70 28 24-73 74 72 2c  mywordwr ap($str,
0000-0130:  20 24 6d 61-78 20 3d 20-33 30 30 2c-20 24 62 72  .$max.=. 300,.$br
0000-0140:  65 61 6b 20-3d 20 27 20-27 29 20 7b-0d 20 20 0d  eak.=.'. ').{....
0000-0150:  20 20 24 61-72 72 20 3d-20 65 78 70-6c 6f 64 65  ..$arr.= .explode
0000-0160:  28 27 3c 61-27 2c 20 24-73 74 72 29-3b 0d 0d 20  ('<a',.$ str);...
0000-0170:  20 24 61 72-72 5b 30 5d-20 3d 20 70-72 65 67 5f  .$arr[0] .=.preg_
0000-0180:  72 65 70 6c-61 63 65 28-27 2f 28 5b-5e 5c 73 5d  replace( '/([^\s]
0000-0190:  7b 27 2e 24-6d 61 78 2e-27 7d 29 2f-69 27 2c 22  {'.$max. '})/i',"
0000-01a0:  24 31 24 62-72 65 61 6b-22 2c 24 61-72 72 5b 30  $1$break ",$arr[0
0000-01b0:  5d 29 3b 0d-0d 20 20 66-6f 72 28 24-69 20 3d 20  ]);....f or($i.=.
0000-01c0:  31 3b 20 24-69 20 3c 20-63 6f 75 6e-74 28 24 61  1;.$i.<. count($a
0000-01d0:  72 72 29 3b-20 24 69 2b-2b 29 20 7b-0d 0d 20 20  rr);.$i+ +).{....
0000-01e0:  20 24 61 72-72 32 20 3d-20 65 78 70-6c 6f 64 65  .$arr2.= .explode
0000-01f0:  28 27 3c 2f-61 3e 27 2c-20 24 61 72-72 5b 24 69  ('</a>', .$arr[$i
0000-0200:  5d 29 3b 0d-0d 20 20 20-24 61 72 72-32 5b 31 5d  ]);..... $arr2[1]
0000-0210:  20 3d 20 70-72 65 67 5f-72 65 70 6c-61 63 65 28  .=.preg_ replace(
0000-0220:  27 2f 28 5b-5e 5c 73 5d-7b 27 2e 24-6d 61 78 2e  '/([^\s] {'.$max.
0000-0230:  27 7d 29 2f-69 27 2c 22-24 31 24 62-72 65 61 6b  '})/i'," $1$break
0000-0240:  22 2c 24 61-72 72 32 5b-31 5d 29 3b-0d 0d 20 20  ",$arr2[ 1]);....
0000-0250:  20 24 61 72-72 5b 24 69-5d 20 3d 20-6a 6f 69 6e  .$arr[$i ].=.join
0000-0260:  28 27 3c 2f-61 3e 27 2c-20 24 61 72-72 32 29 3b  ('</a>', .$arr2);
0000-0270:  0d 20 20 7d-0d 0d 20 20-72 65 74 75-72 6e 20 6a  ...}.... return.j
0000-0280:  6f 69 6e 28-27 3c 61 27-2c 20 24 61-72 72 29 3b  oin('<a' ,.$arr);
0000-028a:  0d 7d 20 0d-0d 0d 0d 0d-3f 3e                    .}...... ?>

[ Voor 102% gewijzigd door Verwijderd op 31-01-2006 17:13 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Na de 'r' van '//extension stripper' staat er een 0d en vervolgens komt de 'f' van 'function'. Er is dus alleen een carriage return en geen linefeed. Bij een fatsoenlijke editor kan je instellen hoe hij hiermee om moet gaan. :)

Om compleet te zijn:
Decimaal 10, Hex 0a, Octaal 012, LF zijn allemaal representaties voor line-feed
Decimaal 13, Hex 0d, Octaal 015, CR zijn allemaal representaties voor carriage return

[ Voor 64% gewijzigd door Voutloos op 31-01-2006 17:27 . Reden: tyop galore ]

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
yeaaaah super! in golive kon ik alle files converten na unix linebreaks, en het werkt!

Rlxd, bedankt! Ik kende dit probleem nog niet. Weer wat geleerd
Pagina: 1