chillerlan / php-qrcode

A PHP QR Code generator and reader with a user-friendly API.
https://smiley.codes/qrcode/
Apache License 2.0
2.01k stars 302 forks source link

Not working outside of doc root #91

Closed grandeljay closed 3 years ago

grandeljay commented 3 years ago

Hello,

when I run an example it works but if the file is buried somewhere under /foo/bar/image.php the image seems to be broken. If it's in my document root it does work. Am I doing something wrong? Do I need to configure something? There don't seem to be any PHP errors.

Obligatory code I am using

use chillerlan\QRCode\{QRCode, QROptions};

// the composer autoloader is being called earlier, this file is then being included

$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';

$options = new QROptions([
    'version'      => 10,
    'outputType'   => QRCode::OUTPUT_IMAGE_PNG,
    'eccLevel'     => QRCode::ECC_H,
    'scale'        => 5,
    'imageBase64'  => false,
    'moduleValues' => [
        // finder
        1536 => [0, 63, 255], // dark (true)
        6    => [255, 255, 255], // light (false), white is the transparency color and is enabled by default
        5632 => [241, 28, 163], // finder dot, dark (true)
        // alignment
        2560 => [255, 0, 255],
        10   => [255, 255, 255],
        // timing
        3072 => [255, 0, 0],
        12   => [255, 255, 255],
        // format
        3584 => [67, 99, 84],
        14   => [255, 255, 255],
        // version
        4096 => [62, 174, 190],
        16   => [255, 255, 255],
        // data
        1024 => [0, 0, 0],
        4    => [255, 255, 255],
        // darkmodule
        512  => [0, 0, 0],
        // separator
        8    => [255, 255, 255],
        // quietzone
        18   => [255, 255, 255],
        // logo (requires a call to QRMatrix::setLogoSpace())
        20    => [255, 255, 255],
    ],
]);

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

echo (new QRCode($options))->render($data);

Output

image

Regards Jay

codemasher commented 3 years ago

You can't see the PHP errors because of the header() line. Outcomment it and you'll see.

grandeljay commented 3 years ago

The log file was also empty, but regardless I have decided to create a file and that seems to work well.

$data = 'Not a rick-roll';

$options = new QROptions([
    'outputType'   => QRCode::OUTPUT_IMAGE_PNG,
    'eccLevel'     => QRCode::ECC_L,
    'addQuietzone' => false,
]);

// invoke a fresh QRCode instance
$qrcode = new QRCode($options);

// and dump the output
$qrcode->render($data);

// ...with additional cache file
$filepathQR = 'qr-codes/' . $config['id'] . '.png';

$qrcode->render($data, $filepathQR);