3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * Command line utility to use dompdf. * Can also be used with HTTP GET parameters * * @package dompdf * @link http://dompdf.github.com/ * @author Benj Carson <benjcarson@digitaljunkies.ca> * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ /** * Display command line usage */ function dompdf_usage() { $default_paper_size = DOMPDF_DEFAULT_PAPER_SIZE; echo <<<EOD Usage: {$_SERVER["argv"][0]} [options] html_file html_file can be a filename, a url if fopen_wrappers are enabled, or the '-' character to read from standard input. Options: -h Show this message -l List available paper sizes -p size Paper size; something like 'letter', 'A4', 'legal', etc. The default is '$default_paper_size' -o orientation Either 'portrait' or 'landscape'. Default is 'portrait' -b path Set the 'document root' of the html_file. Relative urls (for stylesheets) are resolved using this directory. Default is the directory of html_file. -f file The output filename. Default is the input [html_file].pdf -v Verbose: display html parsing warnings and file not found errors. -d Very verbose: display oodles of debugging output: every frame in the tree printed to stdout. -t Comma separated list of debugging types (page-break,reflow,split) EOD; exit; } /** * Parses command line options * * @return array The command line options */ function getoptions() { $opts = array(); if ( $_SERVER["argc"] == 1 ) return $opts; $i = 1; while ($i < $_SERVER["argc"]) { switch ($_SERVER["argv"][$i]) { case "--help": case "-h": $opts["h"] = true; $i++; break; case "-l": $opts["l"] = true; $i++; break; case "-p": if ( !isset($_SERVER["argv"][$i+1]) ) die("-p switch requires a size parameter\n"); $opts["p"] = $_SERVER["argv"][$i+1]; $i += 2; break; case "-o": if ( !isset($_SERVER["argv"][$i+1]) ) die("-o switch requires an orientation parameter\n"); $opts["o"] = $_SERVER["argv"][$i+1]; $i += 2; break; case "-b": if ( !isset($_SERVER["argv"][$i+1]) ) die("-b switch requires a path parameter\n"); $opts["b"] = $_SERVER["argv"][$i+1]; $i += 2; break; case "-f": if ( !isset($_SERVER["argv"][$i+1]) ) die("-f switch requires a filename parameter\n"); $opts["f"] = $_SERVER["argv"][$i+1]; $i += 2; break; case "-v": $opts["v"] = true; $i++; break; case "-d": $opts["d"] = true; $i++; break; case "-t": if ( !isset($_SERVER['argv'][$i + 1]) ) die("-t switch requires a comma separated list of types\n"); $opts["t"] = $_SERVER['argv'][$i+1]; $i += 2; break; default: $opts["filename"] = $_SERVER["argv"][$i]; $i++; break; } } return $opts; } require_once("http://rawgithub.com/dompdf/dompdf/master/dompdf_config.inc.php"); global $_dompdf_show_warnings, $_dompdf_debug, $_DOMPDF_DEBUG_TYPES; $sapi = php_sapi_name(); $options = array(); switch ( $sapi ) { case "cli": $opts = getoptions(); if ( isset($opts["h"]) || (!isset($opts["filename"]) && !isset($opts["l"])) ) { dompdf_usage(); exit; } if ( isset($opts["l"]) ) { echo "\nUnderstood paper sizes:\n"; foreach (array_keys(CPDF_Adapter::$PAPER_SIZES) as $size) echo " " . mb_strtoupper($size) . "\n"; exit; } $file = $opts["filename"]; if ( isset($opts["p"]) ) $paper = $opts["p"]; else $paper = DOMPDF_DEFAULT_PAPER_SIZE; if ( isset($opts["o"]) ) $orientation = $opts["o"]; else $orientation = "portrait"; if ( isset($opts["b"]) ) $base_path = $opts["b"]; if ( isset($opts["f"]) ) $outfile = $opts["f"]; else { if ( $file === "-" ) $outfile = "dompdf_out.pdf"; else $outfile = str_ireplace(array(".html", ".htm", ".php"), "", $file) . ".pdf"; } if ( isset($opts["v"]) ) $_dompdf_show_warnings = true; if ( isset($opts["d"]) ) { $_dompdf_show_warnings = true; $_dompdf_debug = true; } if ( isset($opts['t']) ) { $arr = split(',',$opts['t']); $types = array(); foreach ($arr as $type) $types[ trim($type) ] = 1; $_DOMPDF_DEBUG_TYPES = $types; } $save_file = true; break; default: if ( isset($_GET["input_file"]) ) $file = rawurldecode($_GET["input_file"]); else throw new DOMPDF_Exception("An input file is required (i.e. input_file _GET variable)."); if ( isset($_GET["paper"]) ) $paper = rawurldecode($_GET["paper"]); else $paper = DOMPDF_DEFAULT_PAPER_SIZE; if ( isset($_GET["orientation"]) ) $orientation = rawurldecode($_GET["orientation"]); else $orientation = "portrait"; if ( isset($_GET["base_path"]) ) { $base_path = rawurldecode($_GET["base_path"]); $file = $base_path . $file; # Set the input file } if ( isset($_GET["options"]) ) { $options = $_GET["options"]; } $file_parts = explode_url($file); /* Check to see if the input file is local and, if so, that the base path falls within that specified by DOMDPF_CHROOT */ if(($file_parts['protocol'] == '' || $file_parts['protocol'] === 'file://')) { $file = realpath($file); if ( strpos($file, DOMPDF_CHROOT) !== 0 ) { throw new DOMPDF_Exception("Permission denied on $file. The file could not be found under the directory specified by DOMPDF_CHROOT."); } } if($file_parts['protocol'] === 'php://') { throw new DOMPDF_Exception("Permission denied on $file. This script does not allow PHP streams."); } $outfile = "dompdf_out.pdf"; # Don't allow them to set the output file $save_file = false; # Don't save the file break; } $dompdf = new DOMPDF(); if ( $file === "-" ) { $str = ""; while ( !feof(STDIN) ) $str .= fread(STDIN, 4096); $dompdf->load_html($str); } else $dompdf->load_html_file($file); if ( isset($base_path) ) { $dompdf->set_base_path($base_path); } $dompdf->set_paper($paper, $orientation); $dompdf->render(); if ( $_dompdf_show_warnings ) { global $_dompdf_warnings; foreach ($_dompdf_warnings as $msg) echo $msg . "\n"; echo $dompdf->get_canvas()->get_cpdf()->messages; flush(); } if ( $save_file ) { // if ( !is_writable($outfile) ) // throw new DOMPDF_Exception("'$outfile' is not writable."); if ( strtolower(DOMPDF_PDF_BACKEND) === "gd" ) $outfile = str_replace(".pdf", ".png", $outfile); list($proto, $host, $path, $file) = explode_url($outfile); if ( $proto != "" ) // i.e. not file:// $outfile = $file; // just save it locally, FIXME? could save it like wget: ./host/basepath/file $outfile = realpath(dirname($outfile)) . DIRECTORY_SEPARATOR . basename($outfile); if ( strpos($outfile, DOMPDF_CHROOT) !== 0 ) throw new DOMPDF_Exception("Permission denied."); file_put_contents($outfile, $dompdf->output( array("compress" => 0) )); exit(0); } if ( !headers_sent() ) { $dompdf->stream($outfile, $options); }
Output for git.master, git.master_jit, rfc.property-hooks
Warning: require_once(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in /in/pe7EH on line 126 Warning: require_once(http://rawgithub.com/dompdf/dompdf/master/dompdf_config.inc.php): Failed to open stream: no suitable wrapper could be found in /in/pe7EH on line 126 Fatal error: Uncaught Error: Failed opening required 'http://rawgithub.com/dompdf/dompdf/master/dompdf_config.inc.php' (include_path='.:') in /in/pe7EH:126 Stack trace: #0 {main} thrown in /in/pe7EH on line 126
Process exited with code 255.

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
40.87 ms | 401 KiB | 8 Q