Compare commits
No commits in common. "543e44abc8d34e412853b403ff5dcb3305349006" and "cf07363a8da19153bf5332d429b119f61b77455c" have entirely different histories.
543e44abc8
...
cf07363a8d
@ -1,7 +0,0 @@
|
||||
:8080 {
|
||||
root * xxxxxxxxxx
|
||||
php_fastcgi 127.0.0.1:9000
|
||||
file_server
|
||||
|
||||
try_files {path} {path}/ /index.php?{query}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
FROM alpine:3.21
|
||||
|
||||
|
||||
RUN apk add --no-cache git curl php84 php84-fpm php84-opcache caddy php84-curl php84-xdebug chromium-chromedriver
|
||||
|
||||
ADD .devcontainer/start.sh /start.sh
|
||||
RUN chmod +x /start.sh
|
||||
|
||||
RUN apk add --no-cache php84-ctype php84-dom php84-fileinfo php84-gd php84-iconv php84-simplexml php84-xml php84-xmlreader php84-xmlwriter php84-zip php84-phar php84-openssl
|
||||
RUN curl -sS https://getcomposer.org/installer | /usr/bin/php84 -- --install-dir=/usr/bin --filename=composer
|
||||
|
||||
# caddy stuff
|
||||
ADD .devcontainer/Caddyfile /etc/caddy/Caddyfile
|
||||
RUN sed -i 's/nobody/caddy/g' /etc/php84/php-fpm.d/www.conf
|
||||
RUN sed -i 's/E_ALL \& ~E_DEPRECATED \& ~E_STRICT/E_ALL \& ~E_DEPRECATED \& ~E_STRICT \& ~E_NOTICE \& ~E_WARNING/g' /etc/php84/php.ini
|
||||
|
||||
# configure xdebug
|
||||
RUN echo "zend_extension=xdebug.so" > /etc/php84/conf.d/xdebug.ini
|
||||
RUN echo "xdebug.mode=debug" >> /etc/php84/conf.d/xdebug.ini
|
||||
RUN echo "xdebug.start_with_request=yes" >> /etc/php84/conf.d/xdebug.ini
|
||||
RUN echo "xdebug.client_host=127.0.0.1" >> /etc/php84/conf.d/xdebug.ini
|
||||
RUN echo "xdebug.client_port=9003" >> /etc/php84/conf.d/xdebug.ini
|
||||
RUN echo "xdebug.idekey=VSCODE" >> /etc/php84/conf.d/xdebug.ini
|
@ -1,35 +0,0 @@
|
||||
{
|
||||
"name": "Web Project Dev Container",
|
||||
"build": {
|
||||
"dockerfile": "Dockerfile",
|
||||
"context": ".."
|
||||
},
|
||||
"forwardPorts": [8080],
|
||||
"postCreateCommand": "/start.sh",
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"settings": {
|
||||
"terminal.integrated.shell.linux": "/bin/ash",
|
||||
"php.validate.executablePath": "/usr/bin/php",
|
||||
"php.debug.listenPort": 9003,
|
||||
"php.debug.log": true
|
||||
},
|
||||
"extensions": [
|
||||
"ms-azuretools.vscode-docker",
|
||||
"felixfbecker.php-debug",
|
||||
"bmewburn.vscode-intelephense-client",
|
||||
"otovo-oss.htmx-tags",
|
||||
"devsense.phptools-vscode",
|
||||
"bmewburn.vscode-intelephense-client",
|
||||
"github.copilot",
|
||||
"github.copilot-chat",
|
||||
"anbuselvanrocky.bootstrap5-vscode",
|
||||
"hansuxdev.bootstrap5-snippets",
|
||||
"alefragnani.Bookmarks",
|
||||
"eamodio.gitlens"
|
||||
]
|
||||
}
|
||||
},
|
||||
"remoteUser": "root"
|
||||
}
|
||||
|
@ -1,24 +0,0 @@
|
||||
WORKSPACE_PATH=$( pwd )
|
||||
# Escape the path for safe use in sed
|
||||
ESCAPED_PATH=$(echo "$WORKSPACE_PATH" | sed 's/\//\\\//g')
|
||||
|
||||
echo "[!] Folder is $WORKSPACE_PATH"
|
||||
|
||||
echo ' [+] Starting php'
|
||||
php-fpm83
|
||||
|
||||
echo ' [+] Starting Caddy'
|
||||
sed -i "s|xxxxxxxxxx|$ESCAPED_PATH\/web|g" /etc/caddy/Caddyfile
|
||||
|
||||
cd ${WORKSPACE_PATH}/src
|
||||
composer install
|
||||
|
||||
echo ' [+] Starting Chrome'
|
||||
cd /tmp
|
||||
nohup chromedriver --port=4444 &
|
||||
|
||||
|
||||
chmod 777 ${WORKSPACE_PATH}/cache
|
||||
chmod 777 ${WORKSPACE_PATH}/logs
|
||||
|
||||
caddy start --config /etc/caddy/Caddyfile
|
@ -1,49 +0,0 @@
|
||||
name: Build Container
|
||||
run-name: ${{ gitea.actor }} is pushing
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*.*.*"
|
||||
|
||||
env:
|
||||
REGISTRY: gitea.haschek.at
|
||||
IMAGE_NAME: ${{ gitea.repository }}
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: echo "🎉 Building ${{ gitea.repository }} because of a ${{ gitea.event_name }} event."
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: |
|
||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
tags: |
|
||||
type=semver,pattern={{version}}
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
type=semver,pattern={{major}}
|
||||
type=sha
|
||||
|
||||
- name: Log in to the Container registry
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ gitea.actor }}
|
||||
password: ${{ secrets.BUILD_TOKEN}}
|
||||
|
||||
- name: Build
|
||||
uses: docker/build-push-action@v3
|
||||
env:
|
||||
ACTIONS_RUNTIME_TOKEN: ''
|
||||
with:
|
||||
context: .
|
||||
file: docker/Dockerfile
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
|
14
.vscode/launch.json
vendored
14
.vscode/launch.json
vendored
@ -1,14 +0,0 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Listen for Xdebug",
|
||||
"type": "php",
|
||||
"request": "launch",
|
||||
"port": 9003
|
||||
}
|
||||
]
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
version: '3.3'
|
||||
services:
|
||||
http2pic:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/Dockerfile
|
||||
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./cache:/srv/cache
|
||||
- ./src:/srv/src
|
||||
- ./web:/srv/web
|
||||
- ./logs:/srv/logs
|
||||
|
||||
environment:
|
||||
- URL=http://localhost:8080
|
||||
ports:
|
||||
- 8080:80
|
@ -1,10 +0,0 @@
|
||||
version: '3.3'
|
||||
services:
|
||||
http2pic:
|
||||
image: ghcr.io/hascheksolutions/http2pic:2
|
||||
restart: unless-stopped
|
||||
|
||||
environment:
|
||||
- URL=http://localhost:8080
|
||||
ports:
|
||||
- 8080:80
|
9
docker/Caddyfile
Executable file → Normal file
9
docker/Caddyfile
Executable file → Normal file
@ -1,12 +1,5 @@
|
||||
:80 {
|
||||
root * /srv/web
|
||||
root * /srv
|
||||
php_fastcgi 127.0.0.1:9000
|
||||
file_server
|
||||
|
||||
log {
|
||||
output file /srv/logs/web.error.log
|
||||
level ERROR
|
||||
}
|
||||
|
||||
try_files {path} {path}/ /index.php?{query}
|
||||
}
|
29
docker/Dockerfile
Executable file → Normal file
29
docker/Dockerfile
Executable file → Normal file
@ -1,31 +1,16 @@
|
||||
FROM alpine:3.21
|
||||
FROM ghcr.io/surnet/alpine-wkhtmltopdf:3.20.3-0.12.6-full
|
||||
|
||||
# Install PHP and necessary extensions
|
||||
RUN apk add --no-cache curl php84 php84-fpm php84-opcache caddy php84-curl php84-xdebug chromium-chromedriver
|
||||
RUN apk add --no-cache php83 php83-fpm php83-opcache caddy php83-curl
|
||||
|
||||
RUN sed -i 's/nobody/caddy/g' /etc/php84/php-fpm.d/www.conf
|
||||
RUN sed -i 's/E_ALL \& ~E_DEPRECATED \& ~E_STRICT/E_ALL \& ~E_DEPRECATED \& ~E_STRICT \& ~E_NOTICE \& ~E_WARNING/g' /etc/php84/php.ini
|
||||
# log php errors to /srv/logs/php_errors.log
|
||||
RUN echo "error_log = /srv/logs/php_errors.log" >> /etc/php84/php.ini
|
||||
|
||||
# Install additional PHP extensions
|
||||
RUN apk add --no-cache php84-ctype php84-dom php84-fileinfo php84-gd php84-iconv php84-simplexml php84-xml php84-xmlreader php84-xmlwriter php84-zip php84-phar php84-openssl
|
||||
RUN curl -sS https://getcomposer.org/installer | /usr/bin/php84 -- --install-dir=/usr/bin --filename=composer
|
||||
|
||||
ADD docker/start.sh /start.sh
|
||||
RUN chmod +x /start.sh
|
||||
RUN sed -i 's/nobody/caddy/g' /etc/php83/php-fpm.d/www.conf
|
||||
RUN sed -i 's/E_ALL \& ~E_DEPRECATED \& ~E_STRICT/E_ALL \& ~E_DEPRECATED \& ~E_STRICT \& ~E_NOTICE \& ~E_WARNING/g' /etc/php83/php.ini
|
||||
|
||||
# Copy the contents of the web/ directory to /srv
|
||||
ADD . /srv
|
||||
|
||||
# Cleanup
|
||||
RUN rm -rf /srv/.git
|
||||
RUN rm -rf /srv/.github
|
||||
RUN rm -rf /srv/.vscode
|
||||
|
||||
COPY web/ /srv
|
||||
|
||||
# Copy the Caddyfile to the container
|
||||
COPY docker/Caddyfile /etc/caddy/Caddyfile
|
||||
|
||||
# Run start script
|
||||
CMD ["sh", "-c", "/start.sh"]
|
||||
# Set the default command to start PHP-FPM and Caddy
|
||||
CMD ["sh", "-c", "php-fpm83 && caddy run --config /etc/caddy/Caddyfile"]
|
||||
|
@ -1,25 +0,0 @@
|
||||
|
||||
echo ' [+] Starting php'
|
||||
php-fpm84
|
||||
|
||||
cd /srv/src
|
||||
composer install
|
||||
|
||||
echo ' [+] Starting Chrome'
|
||||
chromedriver --port=4444 &
|
||||
|
||||
|
||||
chmod 777 /srv/cache
|
||||
chmod 777 /srv/logs
|
||||
|
||||
echo ' [+] Building config'
|
||||
_buildConfig() {
|
||||
echo "<?php"
|
||||
echo "date_default_timezone_set('Europe/Vienna');"
|
||||
echo "define('URL','${URL:-http://localhost:8080}');"
|
||||
echo ""
|
||||
}
|
||||
|
||||
_buildConfig > src/inc/config.inc.php
|
||||
|
||||
caddy run --config /etc/caddy/Caddyfile
|
2
logs/.gitignore
vendored
2
logs/.gitignore
vendored
@ -1,2 +0,0 @@
|
||||
*
|
||||
!.gitignore
|
1
src/.gitignore
vendored
1
src/.gitignore
vendored
@ -1 +0,0 @@
|
||||
vendor/
|
@ -1,5 +0,0 @@
|
||||
{
|
||||
"require": {
|
||||
"php-webdriver/webdriver": "^1.15"
|
||||
}
|
||||
}
|
226
src/composer.lock
generated
226
src/composer.lock
generated
@ -1,226 +0,0 @@
|
||||
{
|
||||
"_readme": [
|
||||
"This file locks the dependencies of your project to a known state",
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "9c8ecf7ef31de7c4a3608d683b57a301",
|
||||
"packages": [
|
||||
{
|
||||
"name": "php-webdriver/webdriver",
|
||||
"version": "1.15.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-webdriver/php-webdriver.git",
|
||||
"reference": "998e499b786805568deaf8cbf06f4044f05d91bf"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/998e499b786805568deaf8cbf06f4044f05d91bf",
|
||||
"reference": "998e499b786805568deaf8cbf06f4044f05d91bf",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-curl": "*",
|
||||
"ext-json": "*",
|
||||
"ext-zip": "*",
|
||||
"php": "^7.3 || ^8.0",
|
||||
"symfony/polyfill-mbstring": "^1.12",
|
||||
"symfony/process": "^5.0 || ^6.0 || ^7.0"
|
||||
},
|
||||
"replace": {
|
||||
"facebook/webdriver": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"ergebnis/composer-normalize": "^2.20.0",
|
||||
"ondram/ci-detector": "^4.0",
|
||||
"php-coveralls/php-coveralls": "^2.4",
|
||||
"php-mock/php-mock-phpunit": "^2.0",
|
||||
"php-parallel-lint/php-parallel-lint": "^1.2",
|
||||
"phpunit/phpunit": "^9.3",
|
||||
"squizlabs/php_codesniffer": "^3.5",
|
||||
"symfony/var-dumper": "^5.0 || ^6.0 || ^7.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-SimpleXML": "For Firefox profile creation"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"lib/Exception/TimeoutException.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Facebook\\WebDriver\\": "lib/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "A PHP client for Selenium WebDriver. Previously facebook/webdriver.",
|
||||
"homepage": "https://github.com/php-webdriver/php-webdriver",
|
||||
"keywords": [
|
||||
"Chromedriver",
|
||||
"geckodriver",
|
||||
"php",
|
||||
"selenium",
|
||||
"webdriver"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/php-webdriver/php-webdriver/issues",
|
||||
"source": "https://github.com/php-webdriver/php-webdriver/tree/1.15.2"
|
||||
},
|
||||
"time": "2024-11-21T15:12:59+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.31.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
|
||||
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.2"
|
||||
},
|
||||
"provide": {
|
||||
"ext-mbstring": "*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "For best performance"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"thanks": {
|
||||
"url": "https://github.com/symfony/polyfill",
|
||||
"name": "symfony/polyfill"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Symfony\\Polyfill\\Mbstring\\": ""
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill for the Mbstring extension",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"compatibility",
|
||||
"mbstring",
|
||||
"polyfill",
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-09-09T11:45:10+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/process",
|
||||
"version": "v7.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/process.git",
|
||||
"reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e",
|
||||
"reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.2"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Component\\Process\\": ""
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"/Tests/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Executes commands in sub-processes",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/process/tree/v7.2.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-11-06T14:24:19+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": {},
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": {},
|
||||
"platform-dev": {},
|
||||
"plugin-api-version": "2.6.0"
|
||||
}
|
@ -1,3 +1,3 @@
|
||||
<?php
|
||||
|
||||
define('URL','http://localhost:8080');
|
||||
define('URL','http://localhost:8081');
|
@ -27,7 +27,7 @@ define('ONDOMAINFAILIMAGE', __DIR__.'/img/domainfailed.jpg');
|
||||
define('RENDERINGENGINE','wkhtmltoimage');
|
||||
|
||||
//location of wkhtmltoimage
|
||||
define('WKHTMLTOIMAGEPATH','wkhtmltoimage');
|
||||
define('WKHTMLTOIMAGEPATH','/usr/sbin/wkhtmltoimage');
|
||||
|
||||
//location of phantomJS
|
||||
define('PHANTOMJSPATH',__DIR__.'/phantomjs');
|
||||
@ -143,7 +143,46 @@ class http2pic
|
||||
|
||||
function render()
|
||||
{
|
||||
return $this->renderPageWKHTMLTOIMAGE();
|
||||
//if phantomjs is selected and installed
|
||||
if(RENDERINGENGINE=='phantomjs' && file_exists(PHANTOMJSPATH))
|
||||
return $this->renderPagePHANTOMJS();
|
||||
|
||||
//no? well ok how about WKHTMLToImage?
|
||||
else if(RENDERINGENGINE=='wkhtmltoimage' && file_exists(WKHTMLTOIMAGEPATH))
|
||||
return $this->renderPageWKHTMLTOIMAGE();
|
||||
|
||||
//you're fucked
|
||||
else
|
||||
throw new Exception('No valid rendering engine found');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Render using PhantomJS
|
||||
**/
|
||||
function renderPagePHANTOMJS()
|
||||
{
|
||||
$cmd = 'timeout '.$this->params['timeout'].' '.PHANTOMJSPATH;
|
||||
$cmd.= ' --ignore-ssl-errors=yes --ssl-protocol=any '.__DIR__.'/phantom.js ';
|
||||
|
||||
$cmd.= ($this->params['url']);
|
||||
$cmd.= ','.($this->params['file']);
|
||||
$cmd.= ','.$this->params['vp_w'];
|
||||
$cmd.= ','.$this->params['vp_h'];
|
||||
$cmd.= ','.$this->params['js'];
|
||||
|
||||
$cmd = escapeshellcmd($cmd);
|
||||
shell_exec($cmd);
|
||||
$this->params['cmd'] = $cmd;
|
||||
|
||||
$this->postRender();
|
||||
if(DEBUG)
|
||||
{
|
||||
$fp = fopen('debug.log', 'a');
|
||||
fwrite($fp, $cmd."\n");
|
||||
fclose($fp);
|
||||
}
|
||||
return $cmd;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -175,10 +214,6 @@ class http2pic
|
||||
|
||||
//add storage path to cmd
|
||||
$cmd.=' '.escapeshellarg($this->params['file']);
|
||||
|
||||
$cmd.=' --wait-for-network-idle';
|
||||
|
||||
var_dump($cmd);
|
||||
|
||||
$cmd = escapeshellcmd($cmd);
|
||||
shell_exec($cmd);
|
||||
@ -206,8 +241,7 @@ class http2pic
|
||||
// resize if necessary
|
||||
if($this->params['resizewidth'])
|
||||
$this->resizeImage($this->params['file']);
|
||||
|
||||
if(!file_exists($this->params['file'])) exit("Error: File not found");
|
||||
|
||||
|
||||
//print image to user
|
||||
if ($this->params['type'] === 'png') {
|
||||
|
@ -50,7 +50,7 @@
|
||||
|
||||
<!-- Page Header -->
|
||||
<!-- Set your background image for this header on the line below. -->
|
||||
<header id="intro-header" class="intro-header" style="background-image: url('/img/home-bg.jpg')">
|
||||
<header id="intro-header" class="intro-header" style="background-image: url('img/home-bg.jpg')">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||
@ -58,7 +58,7 @@
|
||||
<h1 style="text-shadow: 0px 0px 12px #000000;">http2pic</h1>
|
||||
<h2 id="loading"><img src="img/loading.gif" /><br/>Loading..</h2>
|
||||
<hr class="small">
|
||||
<span style="text-shadow: 0px 0px 12px #000000;" class="subheading">Give it a try! <input id="showcase_url" type="url" placeholder="eg. http://xkcd.com" value="https://xkcd.com" />
|
||||
<span style="text-shadow: 0px 0px 12px #000000;" class="subheading">Give it a try! <input id="showcase_url" type="url" placeholder="eg. http://xkcd.com" />
|
||||
<input id="showcase_button" type="button" value="GO" /></div>
|
||||
</div>
|
||||
</div>
|
||||
@ -71,7 +71,7 @@
|
||||
<!-- Main Content -->
|
||||
<div class="container">
|
||||
<h2>How the API works</h2>
|
||||
<div class="well"><h2 ><?=URL?>/api/url=<span style="color:#1e90ff">[WEBSITE_URL]</span>&<span style="color:#C73C49">[OPTIONS]</span></h2></div><hr/><br/>
|
||||
<div class="well"><h2 ><?=URL?>/api.php?<span style="color:#C73C49">[OPTIONS]</span>&url=<span style="color:#1e90ff">[WEBSITE_URL]</span></h2></div><hr/><br/>
|
||||
<div >
|
||||
<div>
|
||||
<section>
|
||||
@ -90,6 +90,12 @@
|
||||
<td>The URL of the webpage you'd like to take a screenshot of. Make sure to encode the URL!</td>
|
||||
<td>url=http://xkcd.com</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>width</td>
|
||||
<td>WIDTH</td>
|
||||
<td>Resizes the screenshot to a specified maximum width. Default value is the original size</td>
|
||||
<td>width=400</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>viewport</td>
|
||||
<td>WIDTHxHEIGHT</td>
|
||||
@ -98,9 +104,33 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td>js</td>
|
||||
<td>true|false</td>
|
||||
<td>yes|no</td>
|
||||
<td>Allows you to enable/disable JavaScript in the rendered Website. Default value: yes</td>
|
||||
<td>js=false</td>
|
||||
<td>js=yes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>type</td>
|
||||
<td>jpg|png</td>
|
||||
<td>Sets the output file format of the rendered screenshot. Default value: jpg</td>
|
||||
<td>type=png</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>onfail</td>
|
||||
<td>[url of .jpg]</td>
|
||||
<td>If the page can't be reached, this image will be displayed instead</td>
|
||||
<td><?=URL?>/img/pagefailed.jpg</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ondomainfail</td>
|
||||
<td>[url of .jpg]</td>
|
||||
<td>If the web server can't be reached, this image will be displayed instead</td>
|
||||
<td><?=URL?>/img/domainfailed.jpg</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>cache</td>
|
||||
<td>[any alphanumeric string]</td>
|
||||
<td>If provided, caches the rendered image (based on the URL) so it loads faster on next request. The same cache id with the same url will return the cached image. Change cache id to re-render</td>
|
||||
<td>f01d0</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -116,10 +146,11 @@
|
||||
<pre><code class="php">
|
||||
<?php
|
||||
$url = 'http://www.xkcd.com';
|
||||
$query = 'viewport=1200x330&url='.rawurlencode($url);
|
||||
$img="<?=URL?>/api/?$query";
|
||||
$query = 'type=jpg&viewport=1200x330&url='.rawurlencode($url);
|
||||
$img="<?=URL?>/api.php?$query";
|
||||
|
||||
echo "<img src='$img' />";
|
||||
?>
|
||||
</code></pre>
|
||||
</p>
|
||||
|
||||
@ -130,7 +161,7 @@
|
||||
<pre><code class="php">
|
||||
<?php
|
||||
$targeturl = 'http://www.xkcd.com';
|
||||
$url = '<?=URL?>/api/?url='.rawurlencode($targeturl);
|
||||
$url = '<?=URL?>/api.php?url='.rawurlencode($targeturl);
|
||||
|
||||
$ch = curl_init($url);
|
||||
$fp = fopen('xkcd.jpg', 'wb');
|
||||
@ -139,6 +170,7 @@
|
||||
curl_exec($ch);
|
||||
curl_close($ch);
|
||||
fclose($fp);
|
||||
?>
|
||||
</code></pre>
|
||||
</p>
|
||||
</section>
|
||||
|
23
web/api.php
Normal file
23
web/api.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
include_once(ROOT.DS.'src'.DS.'http2pic.class.php');
|
||||
|
||||
$url = $_GET['url'];
|
||||
$type = $_GET['type'];
|
||||
$timeout = $_GET['timeout'];
|
||||
$viewport = $_GET['viewport'];
|
||||
$js = $_GET['js'];
|
||||
$resizewidth = $_GET['width'];
|
||||
$cache = $_GET['cache'];
|
||||
$onfail = rawurldecode($_GET['onfail']);
|
||||
|
||||
$params = array('url'=>trim($url),
|
||||
'type'=>$type,
|
||||
'timeout'=>$timeout,
|
||||
'viewport'=>$viewport,
|
||||
'js'=>$js,
|
||||
'resizewidth'=>$resizewidth,
|
||||
'cache'=>$cache,
|
||||
'onfail'=>$onfail);
|
||||
|
||||
$http2pic = new http2pic($params);
|
||||
//echo nl2br(print_r($http2pic->debug(),true));
|
@ -1,14 +1,10 @@
|
||||
<?php
|
||||
use Facebook\WebDriver\Remote\RemoteWebDriver;
|
||||
use Facebook\WebDriver\Remote\DesiredCapabilities;
|
||||
|
||||
define('DS', DIRECTORY_SEPARATOR);
|
||||
define('ROOT', dirname(__FILE__).DS.'..');
|
||||
|
||||
require_once(ROOT.DS.'src'.DS.'config.inc.php');
|
||||
require_once(ROOT.DS.'src'.DS.'helpers.php');
|
||||
require_once(ROOT.DS.'src'.DS.'http2pic.class.php');
|
||||
require_once(ROOT.DS.'src'.DS.'vendor'.DS.'autoload.php');
|
||||
|
||||
$url = array_filter(explode('/',ltrim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH),'/')));
|
||||
|
||||
@ -20,55 +16,30 @@ if(php_sapi_name()=='cli-server' && file_exists(ROOT.DS.'web'.DS.implode('/',$ur
|
||||
switch($url[0])
|
||||
{
|
||||
case 'api':
|
||||
$target = substr($_SERVER['REQUEST_URI'],5);
|
||||
if(!$target || !filter_var($target, FILTER_VALIDATE_URL))
|
||||
$target = $_REQUEST['url'];
|
||||
if(!filter_var($target, FILTER_VALIDATE_URL))
|
||||
{
|
||||
header('HTTP/1.0 400 Bad Request');
|
||||
echo 'Invalid URL';
|
||||
exit;
|
||||
}
|
||||
$viewport = $_REQUEST['viewport'];
|
||||
$js = $_REQUEST['js']=='false'?false:true;
|
||||
$url = $_GET['url'];
|
||||
$type = $_GET['type'];
|
||||
$timeout = $_GET['timeout'];
|
||||
$viewport = $_GET['viewport'];
|
||||
$js = $_GET['js'];
|
||||
$resizewidth = $_GET['width'];
|
||||
$cache = $_GET['cache'];
|
||||
$onfail = rawurldecode($_GET['onfail']);
|
||||
|
||||
$serverUrl = 'http://localhost:4444';
|
||||
$options = new \Facebook\WebDriver\Chrome\ChromeOptions();
|
||||
$options->addArguments(['--headless', '--disable-gpu', '--no-sandbox', '--disable-dev-shm-usage']);
|
||||
$params = array('url'=>trim($url),
|
||||
'type'=>$type,
|
||||
'timeout'=>$timeout,
|
||||
'viewport'=>$viewport,
|
||||
'js'=>$js,
|
||||
'resizewidth'=>$resizewidth,
|
||||
'cache'=>$cache,
|
||||
'onfail'=>$onfail);
|
||||
|
||||
$http2pic = new http2pic($params);
|
||||
|
||||
$capabilities = DesiredCapabilities::chrome();
|
||||
$capabilities->setCapability(\Facebook\WebDriver\Chrome\ChromeOptions::CAPABILITY, $options);
|
||||
|
||||
//disable javascript if $js is false
|
||||
if(!$js)
|
||||
$capabilities->setCapability('javascriptEnabled', false);
|
||||
|
||||
$driver = RemoteWebDriver::create($serverUrl, $capabilities);
|
||||
|
||||
$driver->get($target);
|
||||
|
||||
//hide scroll bars
|
||||
$driver->executeScript('document.body.style.overflow = "hidden";');
|
||||
|
||||
//set screenshot size to 1920x1080
|
||||
//$driver->manage()->window()->setSize(new \Facebook\WebDriver\WebDriverDimension(1024, 768));
|
||||
//if $viewport is set, set window size
|
||||
if($viewport)
|
||||
{
|
||||
$viewport = explode('x',$viewport);
|
||||
$driver->manage()->window()->setSize(new \Facebook\WebDriver\WebDriverDimension($viewport[0], $viewport[1]));
|
||||
}
|
||||
else
|
||||
{
|
||||
$driver->manage()->window()->setSize(new \Facebook\WebDriver\WebDriverDimension(1024, 768));
|
||||
}
|
||||
|
||||
// take screenshot and save to file
|
||||
//header for png
|
||||
header('Content-Type: image/png');
|
||||
echo $driver->takeScreenshot();
|
||||
|
||||
break;
|
||||
break;
|
||||
case 'img':
|
||||
|
||||
break;
|
||||
default:
|
||||
echo renderTemplate('index.html.php');
|
||||
break;
|
||||
|
@ -3,8 +3,7 @@ $(function() {
|
||||
{
|
||||
$("#showcase_button").attr("disabled","true");
|
||||
var urlenc = encodeURIComponent(url);
|
||||
var host = location.protocol + '//' + location.host;
|
||||
var imageURL = host+"/api/?js=false&viewport=1200x330&url="+urlenc;
|
||||
var imageURL = "api.php?js=no&cache=1&viewport=1200x330&url="+urlenc;
|
||||
//$("#intro-header").css('background-image', 'url(\'/img/loading.gif\')');
|
||||
|
||||
$("#loading").show();
|
||||
|
Loading…
x
Reference in New Issue
Block a user