PHP Scanner Server by pqwoerituytrueiwoq (at) ubuntuforums.org Based on Linux Scanner Server 1.2 Beta by PHiLLIP KLiEWER (http://scannerserver.online02.com) Released under the GPL 2.0 Last Update: 6/17/2020 (Month/Day/Year) For Version: 1.7-19_dev Change Log: https://github.com/GM-Script-Writer-62850/PHP-Scanner-Server/wiki/Change-Log PHP Linux Scanner Server is a PHP web application that allows you to share multiple scanners (supported by SANE) over a network. The following packages need to be installed: * imagemagick (6.5.9+) - For image conversion * sane-utils - For accessing scanners * usbutils - For updating the device path of scanners using libusb * apache2 - A web server * libapache2-mod-php - Ubuntu 16.04 + | Enables PHP to run under apache2 * coreutils - For various purposes, not having this would probably result in an unusable system * php5 - For running php * php - Ubuntu 16.04 + | For running php * php5-json - For storing/transferring/parsing data (If this package is not available, it may already be part of php5) * php-json - Ubuntu 16.04 + | For storing/transferring/parsing data (If this package is not available, it may already be part of php5) + php5-curl - For uploading scans to imgur.com + php-curl - Ubuntu 16.04 + | For uploading scans to imgur.com + tesseract-ocr - For image to text conversion + tar - For downloading a copy of PHP Linux Scanner Server in .tar.lzma format (link in footer) + zip - For downloading a compressed scan + php-fpdf - For downloading a pdf file + libpaper-utils - For detecting paper sizes + sed - Used in the fall-back method of detecting tesseract languages + grep - Used in the fall-back method of detecting tesseract languages _ hplip - Required for HP scanner support _ cups - Required if you want to use the printer service _ php5-cli - For running php from command line _ php-cli - Ubuntu 16.04 + | For running php from command line _ curl - For making url request via command line through the network (alternative to php5-cli) _ tesseract-ocr-all - All Language packages for tesseract _ tesseract-ocr-* - Language packages for tesseract _ fortune - For displaying fortunes in the debug console _ cowsay - For wrapping fortunes in ASCII art * Mandatory + Recommended for full functionality _ Optional or required for full functionality Some of these will likely already be installed, some newer distros (ubuntu 13.10) will require php5-json Starting with Ubuntu 16.04 libapache2-mod-php is not pulled by php, php5 has been changed to php7.0, there is a php meta package sudo apt-get install imagemagick sane-utils usbutils apache2 php libapache2-mod-php php-json php-curl php-fpdf tesseract-ocr tar zip libpaper-utils grep sed coreutils Permissions: The user www-data needs write permissions to the following folders ./scans/file ./scans/thumb ./config ./config/parallel Security Notes: Anyone with access to the scanner can view all your scans Do not give www-data more permission than needed, there may be security holes (If you find any let me know, they are bugs) Supported Browsers: Firefox (recommended) http://www.mozilla.org/en-US/firefox/all.html Google Chrome https://www.google.com/chrome Chromium http://www.chromium.org/getting-involved/dev-channel Safari http://www.apple.com/safari/download/ Opera (NOT Opera Mini) http://www.opera.com/browser/ Microsoft Edge https://www.microsoft.com/en-us/edge IE 11 https://www.microsoft.com/en-us/download/details.aspx?id=41628 Enabling Auto-Deletion of old scans: cleaner.php: Old scan auto-deletion tool. http://ubuntuforums.org/showpost.php?p=10294835&postcount=37 Basically run this command crontab -e then add this line (if you need root here use `sudo crontab -e`) */5 * * * * php -f /path/to/cleaner.php or this line (Will not require root unless you want it to work when you are not loged in) */5 * * * * curl http://localhost/path/to/cleaner.php It will Check every 5 minutes for scans older than 1 day (86400 seconds value in cleaner.php) and deletes them. Frequently asked questions/issues: Why is there a 404 error while trying to display a 404 error Apparently you are running the server in a sub-folder on the domain, you will need to edit .htaccess with the full path relative to the root document Basically if you put the server in /var/www/scanner/ you need to put /scanner before /inc in the .htaccess file Sometimes when I download a large file I get nothing (a 0 byte file) You will need to increase the max memory PHP can use, To do this run this command (path varies depending on php version, there are two formats): cat /etc/php5/apache2/php.ini -n| grep memory_limit cat /etc/php/7.4/apache2/php.ini -n| grep memory_limit You will see something like this: 407 memory_limit = 128M 407 is the line number the setting is on We need to change the 128 to a higher number Open up /etc/php5/apache2/php.ini as root and change the number I am not sure how high you will need it, I have had issues with files under 60MB hitting the 128MB limit (total usage was under 45% of the limit) I set mine to 1024 (1 GiB) if you need more memory than you have ram be sure your swap partition is large enough to cover the overdraw The debug console shows a error when it runs convert, something about 'convert-im6.q16: no images defined' This can happen when high res images or PDF files, please take a look at this: https://askubuntu.com/questions/1181762/imagemagickconvert-im6-q16-no-images-defined What is bug 13, it is mentioned in the debug console GM-Script-Writer-62850#13 Why don't you have a .deb, .rpm, etc file I can install This more like an addon than a program so I am not sure if one of those would be appropriate, I have written bash scripts to install and update this, you can find them on the Downloads page in the Wiki https://github.com/GM-Script-Writer-62850/PHP-Scanner-Server/wiki/Downloads The brightness and contrast options do not work on lucid lynx. This is because lucid has ImageMagick 6.5.7-8 and the brightness-contrast option was added in version 6.5.9 64Bit: https://launchpad.net/~ubuntu-security/+archive/ppa/+buildjob/2086531/+files/libmagickcore3_6.6.2.6-1ubuntu1.1_amd64.deb https://launchpad.net/~ubuntu-security/+archive/ppa/+buildjob/2086531/+files/libmagickwand3_6.6.2.6-1ubuntu1.1_amd64.deb https://launchpad.net/~ubuntu-security/+archive/ppa/+buildjob/2086531/+files/libmagick%2B%2B3_6.6.2.6-1ubuntu1.1_amd64.deb https://launchpad.net/~ubuntu-security/+archive/ppa/+buildjob/2086531/+files/imagemagick_6.6.2.6-1ubuntu1.1_amd64.deb 32Bit: https://launchpad.net/~ubuntu-security/+archive/ppa/+buildjob/2086533/+files/libmagickcore3_6.6.2.6-1ubuntu1.1_i386.deb https://launchpad.net/~ubuntu-security/+archive/ppa/+buildjob/2086533/+files/libmagickwand3_6.6.2.6-1ubuntu1.1_i386.deb https://launchpad.net/~ubuntu-security/+archive/ppa/+buildjob/2086533/+files/libmagick%2B%2B3_6.6.2.6-1ubuntu1.1_i386.deb https://launchpad.net/~ubuntu-security/+archive/ppa/+buildjob/2086533/+files/imagemagick_6.6.2.6-1ubuntu1.1_i386.deb Why should I enable auto delete? So your Hard Drive does not end up full of scans What does EOL stand for End Of Life, meaning it will no longer receive updates Every time I load a page it is blank. Somehow there is an error somewhere, check your apache error log for me the file was located at /var/log/apache2/error.log You can set php to show the error in the browser by editing your php.ini for me it was located in /etc/php5/apache2/php.ini then find this line display_errors = Off and set it to On (it was on line 531 for me) at this point apache will need a reload (sudo service apache2 reload) If the error was not caused by you not reading the instructions please file a bug report The conversion to text was very poor/blank Try making the image larger the text is probably too small for tesseract-ocr to read How can I change the low disk space warning threshold It is set on line 3 of index.php How can I turn the auto update checker off It is set on line 6 of index.php How can I change the time files are kept with auto-delete enabled Open cleaner.php and change the 86400 on line 2 to a different number (86400 is one day in seconds) You can use math there and put 86400*7 to make it a week I see my scanner with the command "scanimage -L" but it is not being detected This is a permissions issue (and a royal pita) http://127.0.0.1/index.php?page=Access%20Enabler (link works after installing) http://jhansonxi.blogspot.com/2010/10/scanner-access-enabler.html If that site goes the access enabler is included with this (1.2 lacks a desktop file) scanner-access-enabler-1.1.tar.bz2 (http://www.mediafire.com/?86e6ykeueodu7tl) scanner-access-enabler-1.2.tar.bz2 (http://www.mediafire.com/?p1plimo2yf31kl3) scanner-access-enabler-1.4.tar.bz2 (http://www.mediafire.com/?4r1aw9ix9ayb0u0) Why can't I change the orientation on the scan page because the selected paper size will only fit in the scanner one way Why is the pdf download (single page) not working I keep getting a file with a error in it The script assumes fpdf.php is located in /usr/share/php/fpdf/ this is set on line 2 of download.php Why is it hanging up when I search for printers It assumes all found printers are connected to the computer, lpoptions seems to hang when the printer it is looking for is not there How do I increase the max upload size for PDFs? You need to edit your php.ini file for me it was located in /etc/php5/apache2/php.ini You will need to change the post_max_size and upload_max_filesize For me they were on lines 673 and 805 If post_max_size is the lower value it will limit the upload size, this value should in practice be the larger value by just a little How can I make a network share for scans All raw scans are saved to scans/file/ You can create a READ ONLY share It can be relocated using /etc/fstab and the bind option like so: /path/to/share /path/to/scans/file bind defaults,bind 0 0 Can I archive old scans There is a line commented out in cleaner.php that will give you this feature. The upload pritner has a very small file size limit, why? PHP has a config.ini file, located at /etc/php/PHP_VERSION_NUMBER/apache2/php.ini It has 2 setting relavent upload_max_filesize and post_max_size upload_max_filesize is the what limits it, however it has a max value set by post_max_size Internal Configuration Options: Free Space Warning This puts a warning on the page if you are low on disk space low is defined on line 2 of config.ini Fortunes This setting is on line 3 of config.ini This setting is ignored if the program fortune is not installed If it is not working and fortune is installed you may need to update line 201 of index.php with the correct path Extra Scanners This is a developer tool used for simulating scanners This is just for testing the search for scanners feature This is set on line 4 of config.ini Check For Updates Every 24 hours the scanner will check for updates, This is checked on page load It only checks the Internet if the last check was over 24 hours ago This is set on line 5 of config.ini Enable Login There are 2 ways, one is pretty and one is not, but the not so pretty one is by far more secure Look under apache tricks for the secure one The pretty one is enabled on line 6 of config.ini Session Duration This defines the maximum duration a user stays logged in This is set on line 7 of config.ini Default Theme The default theme is set on line 8 of config.ini, you can get the theme code on the 'Configure' page by clicking the 'Save' button under 'Color Scheme' Dark Picker Tells the page whether or not to use the dark color picker theme by default This is set on line 9 of config.ini Ruler Increment This tells the ruler what measurement system to use This is set on line 10 of config.ini Time Zone This overrides the system time zone that is set in php.ini as well as auto detect This may not be of use for PHP versions older than 5.1 This is set on line 11 of config.ini Printer This option enables the server side printing service, the printer must be configured in cups This allows one to easily bypass all the crap involved with sharing printers and all the cross-platform nightmares involved! Setting this option to 0 disables this feature Setting this option to 1 enables it ONLY for printing documents made with the scanner software Setting this option to 2 enables it ONLY for uploaded content via the Printer page Setting this option to 3 enables it for both uploading documents and printing scanned documents This is set on line 12 of config.ini ReplacePrinter This allows you to disable the client side printing button in favor of the intigrrated one This option is ignored if the integrated printer is disabled This is set on line 13 of config.ini BusterPrintBug Debian Buster has a issue with printing PDF files under some conditions Setting this option to 0 leaves mitigations disabled Setting this option to 1 converts the PDF to a ps file before printing using the pdf2ps command, this may reduce quality, but is faster than 2 Setting this option to 2-72 reformats the PDF using the convert command with 72 DPI (pdf -> pdf) Setting this option above 72 will use that number for the DPI setting, high values may hit a the php ram limit or ImageMagick's max dimensions This is set on line 14 of config.ini HomePage This option allows one to change the home page within the scanner server While is supports a vast number of pages, the only options I consider useful are Scan and Printer This is set on line 15 of config.ini ShowRawFormat This option allows one to show or hide the scanner option to change the raw scan format (pnm or tiff) By default this option is hidden for the sake of simplicity This is set on line 16 of config.ini RawScanFormat This option allows one to change the default raw format regardless of the ShowRawFormat setting There is no real reason to pick one over the other, unless you one or the other does not work See Issue #23: GM-Script-Writer-62850#23 Setting this option to 0 makes the default format pnm Setting this option to 1 makes the default format tiff This is set on line 17 of config.ini Credit where credit is due: PHiLLIP KLiEWER Original CGI script pqwoerituytrueiwoq (at) ubuntuforums.org AKA GM-Script-Writer-62850 (at) github.com Conversion/upgrade/security/fixes/cleanup/upgrades jhansonxi (at) ubuntuforums.org Original CGI cleanup prior to conversion and scanner-access-enabler-*.tar.bz2 Everaldo Coelho Icons (Crystal Clear set) ajaxload.info Loading bar animation odyniec (at) odyniec.net imgAreaSelect 0.9.10 Andy Prevost, Marcus Bointon, and Jim Jagielski phpmailer 5.2.6 openiconlibrary.sourceforge.net Powered by Linux image Stefan Petre ColorPicker (www.eyecon.ro/colorpicker/) Does not get full credit, it had lots of issues jamesfu Proof reading (see issue #18) There are a few others, there are comments in the source code for them Installation Notes: Extract files to /var/www/html (or wherever your web pages are visible from) Given you already have php installed you can go to http://127.0.0.1 and it will tell you forgot to do as you try to use it Install the dependencies (you may use curl instead of php5-cli if you do not want auto delete you do not need either) sudo apt-get install tar apache2 php php-cli imagemagick sane-utils php-fpdf Add www-data to the lp group sudo adduser www-data lp Restart service to apply the above command sudo service apache2 restart Be sure to update imagemagick on Lucid Lynx (Ubuntu 10.04) and CentOS If you cloned the git repo you will need to create some folders, git does not allow empty folders sudo mkdir -p /var/www/html/scans/{file,thumb} sudo mkdir -p /var/www/html/config/parallel Make sure www-data can write files to the scans, config, and parallel folders sudo chown www-data /var/www/html/scans/{file,thumb} sudo chown -R www-data /var/www/html/config You may chmod them to 666 if you prefer These command will give you your scanner's URL as a IP address (127.0.0.1 only works on the current system) ifconfig | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/http\:\/\/\1/p' ifconfig | sed -n 's/.*inet \([0-9.]\+\)\s.*/http\:\/\/\1/p' ip address show | grep 'inet ' | cut -f1 -d'/'| sed 's/inet /http:\/\//' This command will give you a easy to remember URL for the scanner (I remember this not working on Windows XP clients) echo http://$(uname -n).local/ Be sure to check http://www.canyouseeme.org/ so you know if people can use your scanner on the Internet, I suggest using a firewall to prevent this, or putting a password on it. I recommended enabling .htaccess See next section, this will enable faster data transfer over the network, fancy error pages, fancy Index Of pages, cache control, and proper content types If you don't have a /etc/apache2/mods-enabled/headers.load file run this command, this enables catch control and defines mime types via .htaccess sudo ln -s ../mods-available/headers.load /etc/apache2/mods-enabled/ && sudo service apache2 restart Apache Tricks: Note This part was written for a older version of apache2 These 2 lines: Order allow,deny allow from all Have been replaced with this line: Require all granted In the current version Enabling .htaccess open /etc/apache2/sites-available/default locate this: <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> you will see "AllowOverride None" change "None" to "All" make the change and save it now reload apache sudo service apache2 reload Password protecting your scanner using .htaccess be sure .htaccess is enabled (see above) make a file called .htaccess in a folder visible over the network put this in it AuthName "Restricted Area" AuthType Basic AuthUserFile /var/www/.htpasswd AuthGroupFile /dev/null Require valid-user now me need to make a login (Bob is the user name) sudo htpasswd -c /var/www/.htpasswd Bob now you will have to login to access /var/www using /etc/apache2/sites-available/default open /etc/apache2/sites-available/default locate this: <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> make it look something like this: <Directory /var/www> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all AuthName "Please Login" AuthType Basic AuthUserFile /etc/apache2/users AuthGroupFile /dev/null require valid-user </Directory> now you need to make a login with this command sudo htpasswd -c /etc/apache2/users Bob now you need to reload apache sudo service apache2 reload Setting a server name Open /etc/apache2/sites-available/default Add a new line at the top of the file add something like this ServerName www.scanner.com www.scanner.com and be anything you want now run this command sudo service apache2 reload now apache will not fuss about there not being a server name Running apache on a another port open /etc/apache2/ports.conf notice theses 2 lines NameVirtualHost *:80 Listen 80 those tell it to use port 80 you can add more or change them for the sake of example we will use port 81 you may use any port number that is not in use (run a port scan to see what is in use) so we will add these to lines NameVirtualHost *:81 Listen 81 now we need to set a path to run on this port open /etc/apache2/sites-available/default go to the bottom of the file and add this <VirtualHost *:81> DocumentRoot /foo/bar # /foo/bar could be /var/www or /home/bob/public_html for example <Directory /foo/bar> Options FollowSymLinks # follows symbolic links AllowOverride All # allows use of .htaccess Order allow,deny #allows everyone to access it via browser allow from all </Directory> </VirtualHost> now save and run this command sudo service apache2 reload
gmatyszczak/PHP-Scanner-Server
Allows you to use your Linux install as a web based scanner server thus allowing you to scan with any web enabled device; Now supports server side printing! (As of 1.4.11)
PHP