=================================== T R O U B L E S H O O T I N G =================================== Please review the possible solutions below for any issues you may have, before contacting the developers for support. If you are still having issues after trying everything relevant in this document, please reach out to the developers for help in the comm channels listed below. Any feedback is GREATLY appreciated, as it helps make this app better for everyone! :) Web server setup / install (for Server Edition) is available for $30 hourly if needed (see 'Manual Install' section for managed hosting, or try the auto-install bash script for self-hosted). PM me on Twitter / Skype / Telegram @ taoteh1221, or get a hold of me using the below-listed contact methods. Have a question, feature you'd like to see added, or an issue to report? You can do that at the following URLs... Issue Reporting (Features / Issues / Help): https://github.com/taoteh1221/Open_Crypto_Tracker/issues Discord Chat: https://discord.gg/WZVK2nm Telegram Chat: https://t.me/dragonfrugal Private Contact: https://dragonfrugal.com/contact Donations support further development... Bitcoin: 3Nw6cvSgnLEFmQ1V4e8RSBG23G7pDjF3hW Ethereum: 0x644343e8D0A4cF33eee3E54fE5d5B8BFD0285EF8 Solana: GvX4AU4V9atTBof9dT9oBnLPmPiz3mhoXBdqcxyRuQnU Github Sponsors: https://github.com/sponsors/taoteh1221 Patreon: https://www.patreon.com/dragonfrugal PayPal: https://www.paypal.me/dragonfrugal Venmo: https://account.venmo.com/u/taoteh1221 ========================================================================================================================================= Setting Up The 'Desktop Edition' (runs very easily, like any other normally-downloaded native app) ----------------------------------------------------------------------------------------------------------------------------------------- To install as a normal native app on your laptop / desktop, download the "Desktop Edition" of the app here: https://github.com/taoteh1221/Open_Crypto_Tracker/releases After downloading, unzip the contents of the download to your desktop or other preferred file location (it doesn't matter, put it wherever you want to). Now use your operating system's file browser to enter the app's main directory, and click on "RUN_CRYPTO_TRACKER" to launch the app (in Windows Desktop Edition, click "INSTALL_WEB_SERVER_FIRST" beforehand). TO USE PRICE CHARTS AND PRICE ALERTS TO EMAIL / TEXT / ALEXA / TELEGRAM, YOU #MUST# LEAVE THE APP RUNNING UNLESS YOU SETUP A CRON JOB / SCHEDULED TASK! (see: "Setting Up Price Charts And Email / Text / Telegram / Alexa Price Alerts") IMPORTANT NOTES FOR WINDOWS USERS: YOU NEED "7 ZIP" INSTALLED, TO OPEN AND EXTRACT THE DOWNLOAD ARCHIVE: https://www.geeksforgeeks.org/how-to-download-and-install-7-zip-on-windows IMPORTANT NOTES FOR LINUX USERS: IF YOU GET THE ERROR: "CGI program sent malformed or too big", YOU LIKELY NEED TO BUILD A PHP BINARY THAT IS COMPATIBLE WITH YOUR UNIQUE SYSTEM SETUP. Try running the script "BUILD-PHP-FOR-LINUX-DESKTOP.bash" in the Desktop Edition main folder, which should fix things automatically for you. Just make sure it's file permissions are set to "executable" (chmod +x, OR chmod 755 should do that). IMPORTANT STEP: YOU *MUST* SHUT DOWN THE DESKTOP EDITION OF THIS APP *BEFOREHAND*, OTHERWISE THIS SCRIPT *CANNOT* INSTALL THE CREATED PHP BINARY IT BUILDS! ========================================================================================================================================= Automatic Install / Upgrade For 'Server Edition' With Debian / Ubuntu / DietPi OS / RaspberryPi OS / Armbian, On Home / Internal Network (recommended way to PRIVATELY / CHEAPLY use this app) ----------------------------------------------------------------------------------------------------------------------------------------- Recommended MINIMUM system specs: 1 Gigahertz CPU / 512 Megabytes RAM / HIGH QUALITY 16 Gigabyte MicroSD card (running Nginx or Apache headless with PHP v7.2+) To install / upgrade everything automatically on Debian / Ubuntu / DietPi OS / RaspberryPi OS / Armbian, copy => paste => run the command below in a terminal program (using the 'Terminal' app in the system menu, or over remote SSH), while logged in AS THE USER THAT WILL RUN THE APP (user must have sudo privileges): wget --no-cache -O FOLIO-INSTALL.bash https://tinyurl.com/install-crypto-tracker;chmod +x FOLIO-INSTALL.bash;sudo ./FOLIO-INSTALL.bash Follow the prompts. This automated script gives you the options to: install / uninstall a PHP web server automatically, download / install / configure / uninstall the latest version of the Open Crypto Tracker app automatically, setup a cron job automatically (for price alerts / charts), and setup SSH (to update / install web site files remotely to the web server via SFTP) automatically. When the auto-install is completed, it will display addresses / logins to access the app (write these down / save them for future use). SEE /DOCUMENTATION-ETC/RASPBERRY-PI/ for additional information on securing and setting up Raspberry Pi OS (disabling bluetooth, firewall setup, remote login, hostname, etc). ========================================================================================================================================= Installing On A Web Server / Manual Installation ('Server Edition') ----------------------------------------------------------------------------------------------------------------------------------------- Just upload / move this app's files to your PHP-based web server directory (with an FTP client like FileZilla) and you should be all set, unless your host is a strict setup related to file writing permissions, in which case the 'cache' directory permissions should be set to '770' chmod on unix / linux systems (or 'readable / writable' on windows systems). Your web host must have CURL modules activated on your HTTP server. Most web hosting companies provide this "out-of-the-box" already. This app will detect whether or not CURL is setup on your website server (and also alert you to any other missing required system components / configurations). WINDOWS 10 / 11 USERS WHO ARE USING XAMPP WILL NEED TO ENABLE GD FOR PHP (FOR THE ADMIN LOGIN CAPTCHA SECURITY) BEFORE USING THIS APP. PLEASE SEE THE SCREENSHOT LOCATED AT /DOCUMENTATION-ETC/XAMPP-ENABLE-GD.png FOR A VISUAL ON SETTING THIS UP EASILY. See "Setting Up Price Charts And Email / Text / Telegram / Alexa Price Alerts", for how to setup a cron job / scheduled task for additional features. ========================================================================================================================================= Setting Up Price Charts And Email / Text / Telegram / Alexa Price Alerts ----------------------------------------------------------------------------------------------------------------------------------------- IMPORTANT NOTES: THIS IS FOR 'SERVER EDITION' ONLY, UNLESS YOU DISABLE 'desktop_cron_interval' (AND reload / restart app) IN THE POWER USER CONFIG IN THE 'DESKTOP EDITION'...IN WHICH CASE READ THE CRON JOB INSTALL SECTIONS BELOW THAT ARE RELEVANT TO YOUR OPERATING SYSTEM. You can setup price charts or price alerts in your app install. Price alerts can be sent to email, mobile phone text, Telegram, and Alexa notifications. You will be alerted when the [configured default primary currency] price of an asset goes up or down a certain percent or more (whatever percent you choose in the settings), for specific exchange / base pair combinations for that asset. You can even setup alerts and charts for multiple exchanges / base pairs for the same asset. Running price charts or price alerts requires setting up a cron job or scheduled task on the Debian / Ubuntu / DietPi OS / RaspberryPi OS / Armbian / Windows 10 machine or website server (this is automated for Debian / Ubuntu / DietPi OS / RaspberryPi OS / Armbian users using the automated FOLIO-INSTALL.bash script / Windows 10 users who run the ADD-WIN10-SCHEDULER-JOB.bat file), otherwise charts / alerts will not work. Also see the related settings in Admin Config for charts / alerts. Once a cron job or scheduled task is setup ON YOUR APP SERVER, there is no need to keep your PC / Laptop turned on (UNLESS you are running the app server on the same device). The price charts and price alerts run automatically from your Open Crypto Tracker app server installation. If you encounter errors or the charts / alerts don't work during setup, check the app logs file at /cache/logs/app_log.log for errors in your configuration setup. Basic checks are performed and errors are reported there, and on the Settings page. If you decide to turn on cron job / scheduled task based features, then the file cron.php (located in the primary directory of this app) must be setup as a cron job or scheduled task on your Debian / Ubuntu / DietPi OS / RaspberryPi OS / Armbian / Windows 10 / website server device. As mentioned previously, if you run the automated setup / install script for Debian / Ubuntu / DietPi OS / RaspberryPi OS / Armbian / Windows 10 devices on home / internal networks, automatic cron job / scheduled task setup is offered as an option during this process. If you are using a full stack website host for hosting a TLD website domain name remotely, consult your web server host's documentation or help desk for their particular method of setting up a cron job. Note that you should have the cron job run every 5, 10, 15, 20, or 30 minutes 24/7, based on how often you want chart data points / alerts / any other cron based features to run. Setting up the cron job to run every 20 minutes is the RECOMMENDED lowest time interval. IF SET BELOW 20 MINUTES, light (time period) chart disk writes may be excessive for lower end hardware (Raspberry PI MicroSD cards etc). IF SET #VERY LOW# (5 / 10 minutes), the free exchange APIs may throttle / block your data requests temporarily on occasion for requesting data too frequently (negatively affecting your alerts / charts). FOR WINDOWS 10 / 11 USERS, just click and run the file 'ADD-WIN10-SCHEDULER-JOB.bat' found in the main directory of the app, follow the prompts, and everything will be automatically setup for you (if PHP-CLI isn't auto-detected, it allows you to manually enter the path to it). As long as you login into THE SAME Windows account after system startup, the scheduled task will run until your computer is shut off OR you logout of that user account (SO YOU *NO LONGER* NEED TO LEAVE THE *DESKTOP EDITION* APP RUNNING ANYMORE FOR SCHEDULED TASKS [if you use that edition]). ADDITIONALLY, IF YOU ARE RUNNING THE *DESKTOP EDITION*, YOU'LL *ALSO* NEED TO SET 'desktop_cron_interval' TO ZERO (IN THE ADMIN CONFIG "POWER USER" SECTION), AND RESTART / RELOAD THE DESKTOP APP. FOR LINUX / MAC USERS, here is an example cron job command line for reference below (NOT including any cron parameters your host interface may require), to setup as the "command" within a cron job. Replace system paths in the example with the correct ones for your server (TIP - A very common path to PHP on a server is /usr/bin/php): /path/to/php -q /home/username/path/to/website/this_app/cron.php FOR LINUX (if you have systemd), here is another example of a COMPLETE cron command that can be added by creating the following file (you'll need sudo/root permissions): /etc/cron.d/cryptocoin on a linux-based machine with systemd (to run every 20 minutes 24/7)...play it safe and add a newline after it as well if you install examples like these (must be owned by "root" / chmod permission set to 644): */20 * * * * WEBSITE_USERNAME_GOES_HERE /usr/bin/php -q /var/www/html/cron.php > /dev/null 2>&1 FOR LINUX / MAC, if your system DOES NOT have the directory /etc/cron.d/ on it, then NEARLY the same format (minus the username) can be installed via the legacy 'crontab -e' command (YOU MUST BE logged in as the user you want running the cron job): */20 * * * * /usr/bin/php -q /var/www/html/cron.php > /dev/null 2>&1 IMPORTANT CRON JOB NOTES: MAKE SURE YOU ONLY USE EITHER /etc/cron.d/, or 'crontab -e', NOT BOTH...ANY OLD DUPLICATE CRONTAB ENTRIES WILL RUN YOUR CRON JOB TOO OFTEN. If everything is setup properly, and the cron job still does NOT run, your particular server MAY require the cron.php file permissions to be set as 'executable' ('750' chmod on unix / linux systems) to allow running it. ========================================================================================================================================= Adding Your Own Coins ----------------------------------------------------------------------------------------------------------------------------------------- IMPORTANT NOTE: IN THE v6 RELEASE (Coming Soon™), DOING THIS MANUALLY IN A TEXT EDITOR WON'T BE NECESSARY. YOU WILL BE ABLE TO DO IT IN THE "Admin Config => Portfolio Assets" INTERFACE MUCH EASIER. Below is an example for editing your assets / markets in the file config.php (located in the primary directory of this app), within the PORTFOLIO ASSETS section. It's very quick / easy to do (after you get the hang of it, lol). Also see the text file /DOCUMENTATION-ETC/CONFIG-EXAMPLE.txt, for a pre-configured set of default settings and example assets / markets. Contact any supported exchange's help desk if you are unaware of the correct formatting of the trading pair naming you are adding in the configuration file (examples: Kraken has arbitrary Xs inserted in SOME older pair names, HitBTC sometimes has tether pairs without the "T" in the symbol name, and bybit can prepend "1000" to low-unit-value coin's market IDs). Support for over 20 trading pairs (country fiat currency or secondary crypto, contact me to request more): AUD / BRL / BTC / CAD / CHF / DAI / ETH / EUR / GBP / HKD / INR / JPY / KRW / MKR / MXN / NIS / RAY / RUB / SGD / SOL / TRY / TWD / UNI / USD / USDC / USDT / ZAR Support for over 40 exchanges (contact me to request more): alphavantage_stock / binance / binance_us / bit2c / bitbns / bitfinex / bitflyer / bitforex / bitmart / bitmex / bitmex_u20 / bitmex_z20 / bitpanda / bitso / bitstamp / btcmarkets / btcturk / buyucoin / bybit / cex / coinbase / coindcx / coinex / coingecko_btc / coingecko_eth / coingecko_eur / coingecko_gbp / coingecko_sgd / coingecko_twd / coingecko_usd / coinspot / crypto.com / ethfinex / gateio / gemini / hitbtc / huobi / jupiter_ag / korbit / kraken / kucoin / liquid / loopring_amm / luno / okcoin / okex / poloniex / southxchange / unocoin / upbit / wazirx / zebpay Nearly Unlimited Assets Supported (whatever assets exist on supported exchanges). Ethereum ICO subtoken support (pre-exchange listing) has been built in (values are static ICO values in ETH). USAGE (ADDING / UPDATING COINS): // UPPERCASE_COIN_TICKER_HERE 'UPPERCASE_COIN_TICKER_HERE' => array( 'name' => 'COIN_NAME_HERE', // Website slug (URL data) on coinmarketcap / coingecko, leave blank if not listed there 'mcap_slug' => 'WEBSITE_SLUG_HERE', // MARKET IDS ARE CASE-SENSITIVE! 'pair' => array( 'lowercase_pair_abrv' => array( 'lowercase_exchange1' => 'MARKETIDHERE', 'lowercase_exchange2' => 'ASSET/PAIR', 'lowercase_exchange3' => 'ASSET-PAIR', 'lowercase_exchange4' => 'ASSET_PAIR', 'lowercase_exchange5' => 'ASSETPAIR', // GENERIC PAIR PRICE (IF NO EXHANGE APIs AVAILABLE) // USE COINGECKO'S API ID FOR THIS ASSET (SEE COINGECKO ASSET PAGE'S INFO SECTION) // LOWERCASE_PAIR_ABRV MUST BE SUPPORTED BY COINGECKO'S 'vs_currencies' API PARAMETER! 'coingecko_LOWERCASE_PAIR_ABRV' => 'coingecko_api_id_here', ), 'eth' => array( 'lowercase_exchange1' => 'MARKETIDHERE', 'lowercase_exchange2' => 'ASSET/ETH', 'lowercase_exchange3' => 'ASSET-ETH', 'lowercase_exchange4' => 'ASSET_ETH', 'lowercase_exchange5' => 'ASSETETH', // ETH ICOs...ETHSUBTOKENNAME MUST be defined in 'ethereum_erc20_icos' (Admin Config POWER USER section) 'ico_erc20_value' => 'ETHSUBTOKENNAME', // GENERIC ETH PRICE (IF NO EXHANGE APIs AVAILABLE) // USE COINGECKO'S API ID FOR THIS ASSET (SEE COINGECKO ASSET PAGE'S INFO SECTION) 'coingecko_eth' => 'coingecko_api_id_here', ), 'btc' => array( // GENERIC BTC PRICE (IF NO EXHANGE APIs AVAILABLE) // USE COINGECKO'S API ID FOR THIS ASSET (SEE COINGECKO ASSET PAGE'S INFO SECTION) 'coingecko_btc' => 'coingecko_api_id_here', ), 'usd' => array( // GENERIC USD PRICE (IF NO EXHANGE APIs AVAILABLE) // USE COINGECKO'S API ID FOR THIS ASSET (SEE COINGECKO ASSET PAGE'S INFO SECTION) 'coingecko_usd' => 'coingecko_api_id_here', // GENERIC *DEX* USD PRICE (IF NOT LISTED *ANYWHERE* BESIDES DEXS [DECENTRALIZED EXCHANGES]) 'coingecko_terminal' => 'network_name_here||pool_address_here', ), 'eur' => array( // GENERIC EUR PRICE (IF NO EXHANGE APIs AVAILABLE) // USE COINGECKO'S API ID FOR THIS ASSET (SEE COINGECKO ASSET PAGE'S INFO SECTION) 'coingecko_eur' => 'coingecko_api_id_here', ), 'gbp' => array( // GENERIC GBP PRICE (IF NO EXHANGE APIs AVAILABLE) // USE COINGECKO'S API ID FOR THIS ASSET (SEE COINGECKO ASSET PAGE'S INFO SECTION) 'coingecko_gbp' => 'coingecko_api_id_here', ), ) // pair END ), // Asset END // UPPERCASE_STOCK_TICKER_HERESTOCK // (*ALWAYS* APPEND WORD "STOCK" TO THE TICKER HERE, to designate as a stock [NOT crypto / fiat]) 'UPPERCASE_STOCK_TICKER_HERESTOCK' => array( 'name' => 'STOCK_NAME_HERE', // Website slug (URL data) on Google Finance, leave blank if not listed there 'mcap_slug' => 'UPPERCASE_STOCK_TICKER_HERE:EXCHANGE_NAME_HERE', // MARKET IDS ARE CASE-SENSITIVE! 'pair' => array( 'usd' => array( 'alphavantage_stock' => 'ALPHAVANTAGE_TICKER_ID_HERE', ), /* /////////////////////////////////////////////////// 'ALPHAVANTAGE_TICKER_ID_HERE' EXAMPLES FOR STOCKS... (SEE EXAMPLES IN CONFIG.PHP FOR MORE DETAILS ON ADDING STOCKS) /////////////////////////////////////////////////// IBM (United States): IBM Tesco PLC (UK - London Stock Exchange): TSCO.LON Shopify Inc (Canada - Toronto Stock Exchange): SHOP.TRT GreenPower Motor Company Inc (Canada - Toronto Venture Exchange): GPV.TRV Daimler Truck Holding AG (Germany - XETRA): DTG.DEX Reliance Industries Limited (India - BSE): RELIANCE.BSE SAIC Motor Corporation (China - Shanghai Stock Exchange): 600104.SHH China Vanke Company Ltd (China - Shenzhen Stock Exchange): 000002.SHZ /////////////////////////////////////////////////// */ ) // pair END ), // Asset END // SEE /DOCUMENTATION-ETC/CONFIG-EXAMPLE.txt FOR A FULL EXAMPLE OF THE DEFAULT CONFIGURATION (ESPECIALLY IF YOU MESS UP config.php, lol) ========================================================================================================================================= Layout / Functions / Assets Not Running Properly, After Reconfiguring Or Upgrading ----------------------------------------------------------------------------------------------------------------------------------------- If the portfolio assets settings are re-configured or re-ordered in Admin Config, reload / refresh the page before updating any coin values, or the submission form may not be configured properly and may not submit or display data correctly. Also, you may need to uncheck "Use cookies to save data" on the Settings page, to temporarily clear out old cookie data that may conflict with the new configuration...then you can re-enable cookies again afterwards. If you recently upgraded to a newer version of this app, and layout or features don't work properly anymore, you may need to clear your browser cache (temporary files) and restart you browser / refresh the page afterwards. This will assure your browser is loading any newly-updated layout styling or javascript-based features. If your problems still persist even after clearing your browser cache (temporary files) and restarting your browser, your config.php setup may be corrupt IF YOU EDITED IT BY HAND. If you did edit it by hand, try backing up you old config.php file, and replacing it with the default config.php file included with the latest release. This will ensure your configuration setup is not corrupt from messed up file formatting. If none of the above solutions work, your last resort (before contacting me for support) is to wipe out all data in your cache directory folder within the app. THIS WILL ERASE YOUR CHART DATA, SO YOU MAY WANT TO BE SURE YOU HAVE A BACKUP FIRST. After your chart data is backed up, delete the folder named 'cache' in the main directory of this app. Reloading the app web page should re-create the cache folder, with new / clean cache files. If you are still having issues after trying everything, file an issue here at the github project account, and I will help you troubleshoot the problems: https://github.com/taoteh1221/Open_Crypto_Tracker/issues ========================================================================================================================================= Coinmarketcap.com / Coingecko.com Data Not Available For An Asset ----------------------------------------------------------------------------------------------------------------------------------------- Either the asset has not been added to Coinmarketcap.com or Coingecko.com yet, you forgot to add the URL slug in it's config section, or you need to increase the number of rankings to fetch in Admin Config in the POWER USER section (500 rankings is the safe maximum to avoid getting your API requests throttled / blocked). ========================================================================================================================================= SMTP Email Sending Doesn't Work ----------------------------------------------------------------------------------------------------------------------------------------- If you have enabled SMTP emailing (to send emails) but it doesn't work, check the app logs files at /cache/logs/app_log.log and /cache/logs/smtp_error.log for error responses from the SMTP server connection attempt(s). If you are sure your username / password / host:port setup are valid, try disabling SMTP email sending by blanking out your username / password / host:port (in the Admin Config COMMUNICATIONS section), and see if PHP's built-in mail function sends emails OK (no setup required, other than SMTP settings must be blanked out). IMPORTANT NOTE: SMTP email sending is REQUIRED if you are running this app on a home network, or if reverse DNS hasn't been properly setup for the TLD domain hosted on this device (servers receiving email from this machine would likely blackhole it, or mark it as junk email). ========================================================================================================================================= Page Loads Slowly Or Throws Errors With Proxies Enabled ----------------------------------------------------------------------------------------------------------------------------------------- If page loads OR cron / background task runtimes are slow / sluggish / COMPLETELY UNRESPONSIVE, or throw API connection errors without clearing up, and you have enabled proxy ip addresses, check the app logs file at /cache/logs/app_log.log for error responses from the server connection attempt(s). If you notice any "connection failed (0 bytes received)" log entries, disable using proxies (in the Admin Config PROXY section), try loading the web page again, AND let cron / background tasks run for a few hours. If everything runs great AFTER disabling proxies, you probably have either a bad / misconfigured / low quality proxy, or an API server / endpoint address is not responding properly when routed through proxies (example: HTTP used instead of HTTPS can cause this error). If you are absolutely sure your proxy setup is ok / high quality, and that an API connection built-in to this app is the issue, please report it here: https://github.com/taoteh1221/Open_Crypto_Tracker/issues ADDITIONAL NOTES: Recieving alerts by email / text / Alexa / Telegram when a proxy connection FAILS is available in the Admin Config PROXIES section. When a proxy connection fails, this app will run a checkup on that proxy, and send you the results. ========================================================================================================================================= Backup Archives Don't Work ----------------------------------------------------------------------------------------------------------------------------------------- This app will automatically detect and alert you if your system doesn't support zip file creating or secure random number generation, which are both used in creating the zip archive backups. So if you have issues with your backup archives working, it's most likely related to file / folder permissions. Make sure the /cache/secured/backups/ directory access permissions are set to readable and writable. This assures the ZIP archive has permission to be created in this directory. ========================================================================================================================================= Binance Markets Do Not Work ----------------------------------------------------------------------------------------------------------------------------------------- Binance started blocking access to some of their price APIs in certain jurasdictions in November of 2022. Check with them in their support channels, if you are unsure if your jurasdiction has been blocked or not. ========================================================================================================================================= Write Errors In Error Log For Charts / Other Data ----------------------------------------------------------------------------------------------------------------------------------------- If you are getting a lot of messages in the error logs like "file_write_error: File write failed for file X", you may need to free up disk space quota on your device, OR change directory permissions on your /cache/ folder. Check to make sure you have not used up all your ALLOWED disk space quota, AND that your /cache/ folder permissions are readable / writable (770 on unix / linux systems). If you already have plenty of disk space quota freed up / your cache folder permissions are readable / writable, and you still have file write issues on linux-based operating systems, you MAY need to setup a higher "open files" limit for your website user account (ESPECIALLY if your app server is running MUTIPLE APPS SIMULTANEOUSLY). If you have shell access you can login and run this command to check your current limits: ulimit -n If it's a low number like 1024, this MAY be the cause of your file write error issue (especially if you run multiple web apps that write a lot of data on the same account). If you are running a dedicated or VPS server, you can easily change this limit. Running a google search for "set permanently ulimit -n linux", you'll find tons of articles on permanently upping your user's open files limit: https://www.google.com/search?q=set+permanently+ulimit+-n+linux ========================================================================================================================================= Partial API Data Failure, When Running Behind Slow Internet Connections ----------------------------------------------------------------------------------------------------------------------------------------- If you installed this application on a device on your home network, or on any other network WITH A SLOW INTERNET CONNECTION, you may need to increase the default timeout for retrieving API data IF YOU #FREQUENTLY# RECEIVE #PARTIAL# API DATA IN THE APP FOR SOME API DATA SETS (the error logs will alert you if this is happening, so check there). To adjust the API timeout, go to the Admin Config EXTERNAL APIS section. Adjust the 'remote_api_timeout' setting much higher, save the setup in the app, and run the app again to see if this fixes the issue. Adjust higher again if the issue still occurs frequently. DON'T SET 'remote_api_timeout' TOO HIGH though, or any unresponsive connections may cause the app to take a very long time to load / reload. ========================================================================================================================================= ========================================================================================================================================= Data Errors, Data Not Updating ----------------------------------------------------------------------------------------------------------------------------------------- Restart the device running this app. If this fixes the problem, you may have crond / systemd crashes ocurring on your system. Make sure you are using a WELL-MAINTAINED version of a debian-based operating system for maximum compatibility with this app (Ubuntu or Raspberry Pi OS are VERY stable an reliable). ========================================================================================================================================= ========================================================================================================================================= Server Edition Error: "Captcha image code was invalid" ----------------------------------------------------------------------------------------------------------------------------------------- If you cannot register a new admin user during a new installation of the SERVER EDITION of this app, because you ALWAYS get the error alert "Captcha image code was invalid" NO MATTER WHAT YOU DO, the issue is most-likely an error in the way you web host provider configured the directory for saving PHP SESSION DATA FILES. This app will attempt to auto-correct this IF detected, BUT if it can't for whatever reason, read on below to learn how to manually fix this problem. Luckily EVEN ON SHARED HOSTING some web host companies allow you to set the PHP sessions directory location. See the screenshot in /DOCUMENTATION-ETC/PHP-SESSIONS-DIRECTORY-SETTING.png in the main directory of this app, for details on using your own directory (AFTER YOU CREATE IT IN A FILE MANAGER) on the correct php.ini setting. ========================================================================================================================================= ========================================================================================================================================= LINUX Desktop Edition Error: "CGI program sent malformed or too big" ----------------------------------------------------------------------------------------------------------------------------------------- If you are using the LINUX Desktop Edition, and you get an error at startup like "CGI program sent malformed or too big", you probably need to compile a custom "php-cgi" binary file on the system you are using, and replace the "php-cgi-custom" binary in the Desktop Edition main folder. Sometimes compiled PHP binaries aren't very portable between different linux systems. To see if this is really the problem by command-line, open a terminal and use the "cd" (change directory) command to go to the main directory of the Desktop Edition, and then type this command: ./php-cgi-custom INSTALL_CRYPTO_TRACKER_HERE/index.php If you see an error like this below, you system is NOT compatible with the included "php-cgi-custom" PHP binary, and you'll need to build a new one for your system: ./php-cgi-custom: error while loading shared libraries: XXXXX.so.X: cannot open shared object file: No such file or directory Try running the script "BUILD-PHP-FOR-LINUX-DESKTOP.bash" in the Desktop Edition main folder, which should fix things automatically for you. Just make sure it's file permissions are set to "executable" (chmod +x, OR chmod 755 should do that). IMPORTANT NOTE: YOU *MUST* SHUT DOWN THE DESKTOP EDITION OF THIS APP *BEFOREHAND*, OTHERWISE THIS SCRIPT *CANNOT* INSTALL THE CREATED PHP BINARY IT BUILDS! Open a terminal and use the "cd" (change directory) command to go to the main directory of the Desktop Edition, and then type this command: ./BUILD-PHP-FOR-LINUX-DESKTOP.bash If this automated script gives you issues, see manual PHP build instructions below... Documentation for manually building custom PHP binaries on linux can be found here (as well as the source code to download to build it with): https://github.com/php/php-src/blob/master/README.md Here is the SPECIFIC "./configure" command (mentioned in the above documentation link) you will need to build PHP with the REQUIRED extensions that the Desktop Edition of this crypto tracker app NEEDS: ./configure \ --enable-bcmath \ --enable-gd \ --enable-calendar \ --enable-dba \ --enable-exif \ --enable-ftp \ --enable-fpm \ --enable-mbstring \ --enable-shmop \ --enable-sigchild \ --enable-soap \ --enable-sockets \ --enable-sysvmsg \ --with-libdir=lib64 \ --with-zip \ --with-bz2 \ --with-curl \ --with-gettext \ --with-openssl \ --with-pdo-mysql \ --with-zlib \ --with-libxml \ --with-freetype \ --prefix=$HOME/customphp After using the above configuration, and then running "make", when you then run "make install" AFTERWARDS, your custom PHP binaries with be installed to a new directory in your home folder called "customphp". Inside this folder you will find a subdirectory named "bin". Inside this subdirectory you'll find the custom PHP binary named "php-cgi". Copy this file "php-cgi" over into the main directory of your linux Desktop Edition of the crypto tracker app. Now delete the old "php-cgi-custom" file in there, and rename the new "php-cgi" file to be named "php-cgi-custom" instead. The linux Desktop Edition of this crypto tracker app should now work fine, if it was indeed a shared library problem. ========================================================================================================================================= Creating A Custom Plugin For This App ----------------------------------------------------------------------------------------------------------------------------------------- IMPORTANT NOTICE: PLUGINS *MAY REQUIRE* A CRON JOB (OR SCHEDULED TASK) RUNNING ON YOUR WEB SERVER (see README.txt for cron job setup information). Take advantage of this app's built-in functions / classes, and your config settings (alert comm channels setup, etc) to create your own custom plugins WITH MINIMAL CODING REQUIRED, to add features to this app. STEPS TO CREATE YOUR OWN PLUGIN... 1) Create a new subdirectory inside the main /plugins/ directory of this app, and name it after your plugin name. Example: "/plugins/my-app-plugin/" (must be lowercase) 2) Create a new subdirectory inside the new plugin directory created in step #1, named "plug-lib". Example: "/plugins/my-app-plugin/plug-lib/" (must be lowercase) 3) Create a blank INIT file (plugin runtime starts here) inside the new "plug-lib" directory created in step #2, with the name "plug-init.php". Example: "/plugins/my-app-plugin/plug-lib/plug-init.php" (must be lowercase) 4) OPTIONALLY create a blank CLASS file (custom class logic goes here), inside the new "plug-lib" directory created in step #2, with the name "plug-class.php". Example: "/plugins/my-app-plugin/plug-lib/plug-class.php" (must be lowercase) 5) All ADDED LOGIC in this "plug-class.php" file is AUTO-INCLUDED IN A NEW CLASS NAMED "$plug['class'][$this_plug]" USING THIS FORMAT BELOW... // CREATES THIS PLUGIN'S CLASS OBJECT DYNAMICALLY AS: $plug['class'][$this_plug] = new class() { var my_var_1 = 'Testing 123'; var my_var_2 = 'World'; function my_function_1($var) { return ' Hello ' . $var . '! '; } }; // END class -- Examples of calling plugin class objects (ANYWHERE FROM WITHIN "plug-init.php" ONWARDS): echo $plug['class'][$this_plug]->my_var_1; echo $plug['class'][$this_plug]->my_function_1( $plug['class'][$this_plug]->my_var_2 ); echo $plug['class'][$this_plug]->my_function_1('Kitty'); ADDING USER-INPUT VALIDATION FOR THE PLUGIN'S ADMIN SETTINGS PAGE: To AUTOMATICALLY INCLUDE your custom user-input validation logic for your plugin's admin settings page, add the EXACT function name "admin_input_validation" into your class file mentioned above: $plug['class'][$this_plug] = new class() { // Validating user input in the admin interface function admin_input_validation() { global $ct, $plug, $this_plug; // Logic here $ct['update_config_error'] = ''; // No input errors $ct['update_config_error'] = 'Input error description goes here'; // An error has ocurred return $ct['update_config_error']; } }; // END class -- If $plug['class'][$this_plug]->admin_input_validation() returns false / null / '' (set blank), then the app will consider the user-input VALIDATED. OTHERWISE, it will halt updating of your plugin's settings, and show the end-user your error message in the user interface. 6) Create a blank CONFIG file (plugin configs go here) inside the new plugin directory created in step #1, with the name "plug-conf.php". Example: "/plugins/my-app-plugin/plug-conf.php" (must be lowercase) NOTES: plug-conf.php MUST only contain STATIC VALUES (dynamic values are NOT allowed), as all configs are saved to / run from cache file: /cache/secured/ct_conf_XXXXXXXXX.dat That said, you CAN create a "placeholder" (empty) configuration value / array in plug-conf.php (for clean / reviewable code), and then dynamically populate it AT THE TOP OF your plug-init.php logic (BEFORE your plugin needs to use that config setting). 7) All "plug-conf.php" PLUGIN CONFIG settings MUST BE INSIDE THE ARRAY "$plug['conf'][$this_plug]" (sub-arrays are allowed). Example: $plug['conf'][$this_plug]['SETTING_NAME_HERE'] = 'mysetting'; Example: $plug['conf'][$this_plug]['SETTING_NAME_HERE'] = array('mysetting1', 'mysetting2'); 8) The "plug-conf.php" PLUGIN CONFIG SETTING 'runtime_mode' IS MANDATORY (plugin WILL NOT be allowed to activate if invalid / blank), to determine WHEN the plugin should run (as a webhook / during cron jobs / user interface loading / all runtimes / etc). Example: $plug['conf'][$this_plug]['runtime_mode'] = 'cron'; // 'cron', 'webhook', 'ui', 'all' When 'runtime_mode' is set to 'webhook', you can pass ADDITIONAL parameters (forwardslash-delimited) *AFTER* THE WEBHOOK KEY in the webhook URL: https://mydomain.com/hook/WEBHOOK_KEY/PARAM1/PARAM2/PARAM3/ETC These parameters are then automatically put into a PHP array named: $webhook_params The webhook key is also available, in the auto-created variable: $webhook_key 9) The "plug-conf.php" PLUGIN CONFIG SETTING 'ui_location' IS OPTIONAL, to determine WHERE the plugin should run (on the tools page, in the 'more stats' section, etc...defaults to 'tools' if not set). Example: $plug['conf'][$this_plug]['ui_location'] = 'tools'; // 'tools', 'more_stats' 10) The "plug-conf.php" PLUGIN CONFIG SETTING 'ui_name' IS OPTIONAL, to determine THE NAME the plugin should show as to end-users (defaults to $this_plug if not set). Example: $plug['conf'][$this_plug]['ui_name'] = 'My Plugin Name'; 11) ADDITIONALLY, if you wish to trigger a RESET on any particular plugin settings during config upgrades (for ACTIVATED plugins), include an array named $ct['dev']['plugin_allow_resets'][$this_plug] *ABOVE* YOUR PLUGIN CONFIG SETTINGS. Example: $ct['dev']['plugin_allow_resets'][$this_plug] = array('plugin-setting-key-1', 'plugin-setting-key-2'); This will COMPLETELY RESET these plugin settings, using the DEFAULT settings in the currently-installed version of the plugin, during upgrade checks on the cached config. 12) OPTIONALLY, create a new subdirectory inside the new plugin directory created in step #1, named "plug-assets". Example: "/plugins/my-app-plugin/plug-assets/" (must be lowercase) THIS IS #REQUIRED TO BYPASS THE USUAL SECURITY# OF OTHER-NAMED DIRECTORIES, SO IMAGES / JAVASCRIPT / CSS / ETC CAN BE LOADED #ONLY FROM HERE#...OTHERWISE ANY DIFFERENT-NAMED ASSETS DIRECTORY #WILL BE DENIED ACCESS# OVER HTTP / HTTPS! 13) OPTIONALLY, create a new subdirectory inside the new plugin directory created in step #1, named "plug-templates". Example: "/plugins/my-app-plugin/plug-templates/" (must be lowercase) 14) OPTIONALLY create a blank ADMIN TEMPLATE file (admin interface settings go here), inside the new "plug-templates" directory created in step #13, with the name "plug-admin.php". Example: "/plugins/my-app-plugin/plug-templates/plug-admin.php" (must be lowercase) 15) OPTIONALLY create a blank DOCUMENTATION TEMPLATE file (usage / documentation for end-user goes here [and is automatically linked at the top of this plugin's admin page]), inside the new "plug-templates" directory created in step #13, with the name "plug-docs.php". Example: "/plugins/my-app-plugin/plug-templates/plug-docs.php" (must be lowercase) 16) We are done setting up the plugin files / folders, so now we need to activate the new plugin. IN THE "Admin Config" PLUGINS section, locate the plugins list. 17) To add / activate your new plugin IN CONFIG.PHP (only required in high security admin mode), add your plugin MAIN FOLDER name (example: 'my-app-plugin') as a new value within the plugins list, and set to 'on'...ALSO INCLUDE A COMMA AT THE END. Example: 'my-app-plugin' => 'on', Otherwise, your new plugin should automatically show in the admin 'Plugins' section, defaulted to 'off'. Just enable it there. Now you are ready to write your custom plugin code in PHP, inside the new plugin files you created. See the example code in the included plugins inside the /plugins/ directory, for useful code snippets to speed up your plugin development. IMPORTANT NOTES: !!NEVER ADD A PLUGIN SOMEBODY ELSE WROTE, UNLESS YOU OR SOMEONE YOU TRUST HAVE REVIEWED THE CODE AND ARE ABSOLUTELY SURE IT IS NOT MALICIOUS!! "plug-conf.php" files are loaded on main app initiation, so they can be included in the GLOBAL cached app config (allowing the editing of these config settings in the admin interface, etc). "plug-init.php" files are where plugins first start loading from, so you edit these files like you would the first file containing the programming logic for your plugin. You are free to add and include more files / folders inside your plugin main folder, in the same way you would build an ordinary application. Any config settings / class functions and variables you have in "plug-conf.php" and "plug-lib/plug-class.php" are automatically available to use in "plug-init.php", and in any other plugin files you create that run within / after the initial "plug-init.php" logic. CRON-DESIGNATED PLUGINS (PLUGINS FLAGGED TO RUN DURING CRON JOBS) DO RUN #LAST# WITHIN THE CRON RUNTIME (AND THEREFORE ARE #NOT# INCLUDED IN RUNTIME STATS DATA LIKE HOW MANY SECONDS IT RAN / SYSTEM LOAD), SO EVEN IF YOUR CUSTOM PLUGIN CRASHES, #EVERYTHING ELSE# IMPORTANT RAN BEFOREHAND ANYWAY. ALWAYS TEST YOUR CODE, TO MAKE SURE IT DOESN'T CRASH THE APP. ========================================================================================================================================= About Open Crypto Tracker ----------------------------------------------------------------------------------------------------------------------------------------- Privately track ANY Crypto on your home network or internet website, for FREE. 100% FREE / open source / PRIVATE cryptocurrency portfolio tracker. Email / text / Alexa / Telegram price alerts, price charts, mining calculators, leverage / gain / loss / balance stats, news feeds + more. Privately track Bitcoin / Ethereum / unlimited cryptocurrencies. Customize as many assets / markets / alerts / charts as you want. The primary goal of the Open Crypto Tracker project is to provide a 100% FREE / PRIVATE / Open Source cryptocurrency tracker to the crypto community, that 'just works', is easy to use, AND maintains a high level of user privacy / security. Previously known as 'DFD Cryptocoin Values', Open Crypto Tracker has been in active development since August of 2014. The source code was released on github.com ( https://github.com/taoteh1221/Open_Crypto_Tracker ) later in September of 2015, under the "Open Source" GPL (version 3) license. Anybody can FULLY audit the security of this app's codebase (or hire someone to do so for them), and report or fix any issues found, or contribute new features. You can even 'fork' your own version of the codebase, as long as you leave licensing / attribution in place within your fork. More information on project ethos and contributing to this project can be found in CONTRIBUTING.txt (in the app's main directory). =========================================================================================================================================