[PHP] Class not found bij use namespace

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • .GoO
  • Registratie: September 2001
  • Laatst online: 27-09 00:53
Geïnspireerd door het artikel Tweakers over naar https wil ik ook graag gebruik gaan maken van een camouflage proxy om de http content op mijn website secure te maken ne het probleem met mixed content op te lossen.

Tweakers verwijst hiervoor naar https://github.com/atmos/camo waarvan ik de PHP variant camophp gebruik. Ik krijg het alleen niet werkend, omdat hij een class not found melding blijft geven op het gebruik van een namespace.

code:
1
2
3
4
5
6
7
8
include "Phpamo/Phpamo.php";

$phpamo = new \WillWashburn\Phpamo\Phpamo(
       'Sleutel',
       'www.domeinnaam.nl'
    );

$phpamo->camo($url); // returns a url guaranteed to be https


Hier zou een https camouflage URL uit moeten komen. Een stukje van het bestand dat ik include:

code:
1
2
3
4
5
6
7
8
9
10
11
namespace WillWashburn\Phpamo;

use Exception;
use WillWashburn\Phpamo\Encoder\HexEncoder;
use WillWashburn\Phpamo\Formatter\FormatterInterface;
use WillWashburn\Phpamo\Formatter\HexFormatter;

class Phpamo
{
  inhoud van de class;
}


Resultaat is de foutmelding Fatal error: Class 'WillWashburn\Phpamo\Phpamo' not found in /map/map/test.php line 3

Nu is het gebruik van namespaces vrij nieuw voor mij en ik snap niet waarom hij de class in het bestand uit de include niet kan vinden. Hopelijk kan iemand hierbij helpen :)

Acties:
  • 0 Henk 'm!

  • borft
  • Registratie: Januari 2002
  • Laatst online: 09-10 16:38
Het zou natuurlijk kunnen dat je include faalt, maar dat je de warning onderdrukt. In dit soort gevallen gebruik ik dan ook meestal require() :)

Acties:
  • 0 Henk 'm!

  • .GoO
  • Registratie: September 2001
  • Laatst online: 27-09 00:53
borft schreef op vrijdag 17 juni 2016 @ 16:44:
Het zou natuurlijk kunnen dat je include faalt, maar dat je de warning onderdrukt. In dit soort gevallen gebruik ik dan ook meestal require() :)
Ik heb display_errors aan staan en als ik de include een andere naam geef dan krijg ik een error, met de correcte naam niet. Dus volgens mij gaat dit wel goed. Ik zal het voor de zekerheid eens met een require proberen.

Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 11-10 16:42
Display Errors zegt alleen dat je ze weergeeft, via error_reporting bepaal je het niveau vanaf welk type errors getoond worden. Met E_ALL geef je dus alles weer, geen gek idee om even naar te kijken :)

Runtime versie: http://php.net/manual/en/function.error-reporting.php

[ Voor 11% gewijzigd door simon op 17-06-2016 16:50 ]

|>


Acties:
  • 0 Henk 'm!

  • borft
  • Registratie: Januari 2002
  • Laatst online: 09-10 16:38
Hmm, ik heb even een testje gemaakt hier, en de code in je voorbeeld werkt hier :)

Welke versie van PHP draai je?

Acties:
  • 0 Henk 'm!

  • .GoO
  • Registratie: September 2001
  • Laatst online: 27-09 00:53
borft schreef op vrijdag 17 juni 2016 @ 16:52:
Hmm, ik heb even een testje gemaakt hier, en de code in je voorbeeld werkt hier :)

Welke versie van PHP draai je?
Vreemd... Ik gebruik PHP versie 5.6.

Error niveau staat overigens al op E_ALL.

Acties:
  • 0 Henk 'm!

  • borft
  • Registratie: Januari 2002
  • Laatst online: 09-10 16:38
hmm, dan snap ik er nog minder van :) Ik zit overigens op php-7.0.4, maar kan me niet voorstellen dat dat het verschil maakt. Zit je op windows of linux/osx?

Acties:
  • 0 Henk 'm!

  • .GoO
  • Registratie: September 2001
  • Laatst online: 27-09 00:53
borft schreef op vrijdag 17 juni 2016 @ 17:02:
hmm, dan snap ik er nog minder van :) Ik zit overigens op php-7.0.4, maar kan me niet voorstellen dat dat het verschil maakt. Zit je op windows of linux/osx?
Linux. Ik heb de include nog even vervangen door require, maar dat verandert niets.

Acties:
  • 0 Henk 'm!

  • .GoO
  • Registratie: September 2001
  • Laatst online: 27-09 00:53
Ik ben een stap verder door use in mijn bronbestand te gebruiken, nu krijg ik in het volgende bestand een fout, de Phpamo.php

Fatal error: Class 'WillWashburn\Phpamo\Formatter\HexFormatter' not found in Phpamo/Phpamo.php on line 9

Dit is de betreffende regel:

code:
1
2
3
4
5
6
7
8
9
10
namespace WillWashburn\Phpamo;

use Exception;
use WillWashburn\Phpamo\Encoder\HexEncoder;
use WillWashburn\Phpamo\Formatter\FormatterInterface;
use WillWashburn\Phpamo\Formatter\HexFormatter;

if ( is_null($formatter) ) {
  $formatter = new HexFormatter(new HexEncoder());
}


Het bestand HexFormatter waar naar verwezen wordt bevat het volgende:

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
namespace WillWashburn\Phpamo\Formatter;

use WillWashburn\Phpamo\Encoder\HexEncoder;

class HexFormatter implements FormatterInterface
{
    /**
     * @var HexEncoder
     */
    private $encoder;

    /**
     * HexFormatter constructor.
     *
     * @param HexEncoder $encoder
     */
    public function __construct(HexEncoder $encoder)
    {
        $this->encoder = $encoder;
    }


    /**
     * @param $domain
     * @param $digest
     * @param $url
     *
     * @return mixed
     */
    public function formatCamoUrl($domain, $digest, $url)
    {
        return 'https://' . $domain . '/' . $digest . '/' . $this->encoder->encode($url).'/';
    }
}


Geen idee hoe dit nou weer een fout kan geven, die class bestaat gewoon... Iemand een idee?

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
include "Phpamo/Phpamo.php"; != include "WillWashburn/Phpamo/Phpamo.php";

Je mist gewoon de directory WillWashburn in je structuur

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • .GoO
  • Registratie: September 2001
  • Laatst online: 27-09 00:53
Het is een namespace, geen directory. Het includen lukt inmiddels wel, zie laatste post. Hij zeurt alleen nog over een class die hij niet kan vinden, terwijl die er wel is binnen die namespace.

Acties:
  • 0 Henk 'm!

  • Feanathiel
  • Registratie: Juni 2007
  • Niet online

Feanathiel

Cup<Coffee>

PHP:
1
2
3
4
5
namespace WillWashburn\Phpamo\Formatter;

use WillWashburn\Phpamo\Encoder\HexEncoder;

class HexFormatter


Is dit alles wat er aan de bovenkant van de file staat? Een use doet namelijk niet de include voor jou (https://github.com/php-fi.../master/accepted/PSR-0.md http://www.php-fig.org/psr/psr-4/).

[ Voor 9% gewijzigd door Feanathiel op 17-06-2016 17:57 ]


Acties:
  • 0 Henk 'm!

  • .GoO
  • Registratie: September 2001
  • Laatst online: 27-09 00:53
Feanathiel schreef op vrijdag 17 juni 2016 @ 17:53:
PHP:
1
2
3
4
5
namespace WillWashburn\Phpamo\Formatter;

use WillWashburn\Phpamo\Encoder\HexEncoder;

class HexFormatter


Is dit alles wat er aan de bovenkant van de file staat? Een use doet namelijk niet de include voor jou (https://github.com/php-fi.../master/accepted/PSR-0.md http://www.php-fig.org/psr/psr-4/).
Je hebt helemaal gelijk, ik moet die bestanden natuurlijk nog includen in Phpamo.php. Weer een stap verder. Er komt een https url uit, wat de image zou moeten zijn. De betreffende url werkt alleen nog niet.

Maar ik ben in ieder geval weer een stap verder, thanks :)

Afbeeldingslocatie: http://opendatakosovo.org/wp-content/uploads/2015/08/php-logo.png

Even getest met bovenstaande image, Tweakers genereert daarvoor de URL https://ic.tweakimg.net/c...F2015%2F08%2Fphp-logo.png

Ik krijg nu de URL https://www.domeinnaam.nl...2d72656e657765642e6a7067/

Zou deze dan naar de image moeten leiden? De URL doet het namelijk niet...

[ Voor 36% gewijzigd door .GoO op 17-06-2016 19:14 ]


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Ja, dat is een manier en dan zou mijn opmerking over missende map ook valide zijn.
Echter doet hij dus blijkbaar handmatige includes.

[ Voor 4% gewijzigd door DJMaze op 17-06-2016 22:47 ]

Maak je niet druk, dat doet de compressor maar

Pagina: 1