John Heenan Posted April 8, 2024 Report Posted April 8, 2024 Blesta: 5.10.0 beta 1 PHP: 8.2.7 OS: Debian 12.5 (stable, bookworm) In forum topic linked below I requested support on how to stop daily file logs filling up with E_DEPRECATED messages, despite error reporting and degug off. For example, the daily general-notice-XXXX-XX-XX.log file with Blesta 5.9.3 is typically over 1 MB. Paul instead requested I let Blesta know about E_DEPRECATED messages with the new upcoming beta and how encountered. The two log messages below are fresh install messages by overwrite of a restored fresh install directory with 5.10.0 beta 1 and with restoration of backed up fresh install database. I think it is worthwhile showing fresh install E_DEPRECATED messages as a base line. I will add in more E_DEPRECATED messages to this thread as as I encounter them, such as after snapshotting a backup of Blesta production directory and database into developer licence directory and database and then upgrading to beta. cat general-notice-2024-*.log | cut -d ' ' -f 1 --complement | awk -F, '!seen[$1]++' | sed 's/\home.*\/blesta\///' general.NOTICE: E_DEPRECATED: Creation of dynamic property SimplePie_Autoloader::$path is deprecated {"code":8192,"message":"Creation of dynamic property SimplePie_Autoloader::$path is deprecated","file":"/plugins/feed_reader/vendors/simplepie/autoloader.php","line":67} cat general-notice-cron-*.log | cut -d ' ' -f 1 --complement | awk -F, '!seen[$1]++' | sed 's/\home.*\/blesta\///' general.NOTICE: E_DEPRECATED: Creation of dynamic property TicketManager::$SupportManagerDepartments is deprecated {"code":8192,"message":"Creation of dynamic property TicketManager::$SupportManagerDepartments is deprecated","file":"/vendors/minphp/bridge/src/Lib/Loader.php","line":256} Link to previous post: Quote
John Heenan Posted April 8, 2024 Author Report Posted April 8, 2024 Here are some initial log messages after snapshoting directory and database from production to developer and then upgrading Blesta 5.9.3 to Blesta 5.10.0 beta 1, using PHP 8.2.7. I cannot be expected to allow cron to run under this condition. However there is plenty to go on without cron running. The conditions are just browsing. No new actions, creations or deletions at the moment. I expect more will be added as I try this. This is an ERROR message, not a E_DEPRECATED message cat general-error-2024-*.log | cut -d ' ' -f 1 --complement | awk -F, '!seen[$1]++' | sed 's/\home\S*\/blesta\///g' general.ERROR: PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'package_pricing.default' in 'where clause' in /vendors/minphp/db/src/PdoConnection.php:196 Stack trace: #0 /vendors/minphp/db/src/PdoConnection.php(196): PDOStatement->execute() #1 /vendors/minphp/record/src/Record.php(793): Minphp\Db\PdoConnection->query() #2 /app/models/packages.php(1518): Minphp\Record\Record->fetch() #3 /app/models/packages.php(650): Packages->getPackagePricing() #4 /app/models/packages.php(577): Packages->appendPackageContent() #5 /app/models/services.php(831): Packages->get() #6 /app/models/services.php(191): Services->appendServiceInfo() #7 /plugins/domains/models/domains_domains.php(94): Services->getList() #8 /plugins/domains/controllers/admin_main.php(881): DomainsDomains->getList() #9 /vendors/minphp/bridge/src/Lib/Dispatcher.php(142): AdminMain->domains() #10 /index.php(21): Dispatcher::dispatch() #11 {main} E_DEPRECATED general notice, not including 'loses precison' message cat general-notice-2024-*.log | grep -v 'loses precision' | cut -d ' ' -f 1 --complement | awk -F, '!seen[$1]++' | sed 's/\home.*\/blesta\///' general.NOTICE: E_DEPRECATED: Creation of dynamic property NetGeoIp::$SettingsCollection is deprecated {"code":8192,"message":"Creation of dynamic property NetGeoIp::$SettingsCollection is deprecated","file":"/vendors/minphp/bridge/src/Lib/Loader.php","line":256} general.NOTICE: E_DEPRECATED: Creation of dynamic property SimplePie_Autoloader::$path is deprecated {"code":8192,"message":"Creation of dynamic property SimplePie_Autoloader::$path is deprecated","file":"/plugins/feed_reader/vendors/simplepie/autoloader.php","line":67} general.NOTICE: E_DEPRECATED: strpos(): Passing null to parameter #2 ($needle) of type string is deprecated {"code":8192,"message":"strpos(): Passing null to parameter #2 ($needle) of type string is deprecated","file":"/components/upload/upload.php","line":398} general.NOTICE: E_DEPRECATED: Creation of dynamic property NamesiloApi::$logger is deprecated {"code":8192,"message":"Creation of dynamic property NamesiloApi::$logger is deprecated","file":"/components/modules/namesilo/apis/namesilo_api.php","line":93} A typical 'loses precision' E_DEPRECATION message cat general-notice-2024-*.log | grep 'loses precision' | cut -d ' ' -f 1 --complement | head -1 | sed 's/\home.*\/blesta\///' general.NOTICE: E_DEPRECATED: Implicit conversion from float 127.34694444444445 to int loses precision {"code":8192,"message":"Implicit conversion from float 127.34694444444445 to int loses precision","file":"/plugins/support_manager/support_manager_controller.php","line":64} This is from the fresh install version, not the copy of production version, as I have turned off cron for the production copy for developer. cat general-notice-cron-*.log | cut -d ' ' -f 1 --complement | awk -F, '!seen[$1]++' | sed 's/\home.*\/blesta\///' general.NOTICE: E_DEPRECATED: Creation of dynamic property TicketManager::$SupportManagerDepartments is deprecated {"code":8192,"message":"Creation of dynamic property TicketManager::$SupportManagerDepartments is deprecated","file":"/vendors/minphp/bridge/src/Lib/Loader.php","line":256} Quote
John Heenan Posted April 8, 2024 Author Report Posted April 8, 2024 (edited) This is a script, named grep_logs, I have prepared for updated reports for this thread. #!/bin/bash cd logs_blesta || exit 1 echo echo "**ERROR message, not E_DEPRECATED message**" cat general-error-2024-*.log | cut -d ' ' -f 1 --complement | awk -F, '!seen[$1]++' | sed 's/\home\S*\/blesta\///g' echo echo echo "**E_DEPRECATED general notice, not including 'loses precison' message**" cat general-notice-2024-*.log | grep -v 'loses precision' | cut -d ' ' -f 1 --complement | awk -F, '!seen[$1]++' | sed 's/\home.*\/blesta\///' echo echo echo "**A typical 'loses precision' E_DEPRECATION message**" cat general-notice-2024-*.log | grep 'loses precision' | cut -d ' ' -f 1 --complement | head -1 | sed 's/\home.*\/blesta\///' echo echo echo "This is from the fresh install version, not the copy of production version, as I have turned off cron for the production copy for developer" echo "cat general-notice-cron-*.log | cut -d ' ' -f 1 --complement | awk -F, '!seen[$1]++' | sed 's/\home.*\/blesta\///'" echo 'general.NOTICE: E_DEPRECATED: Creation of dynamic property TicketManager::$SupportManagerDepartments is deprecated {"code":8192,"message":"Creation of dynamic property TicketManager::$SupportManagerDepartments is deprecated","file":"/vendors/minphp/bridge/src/Lib/Loader.php","line":256}' This is the current result of executing the script, with same results as above: ./grep_logs **ERROR message, not E_DEPRECATED message** general.ERROR: PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'package_pricing.default' in 'where clause' in /vendors/minphp/db/src/PdoConnection.php:196 Stack trace: #0 /vendors/minphp/db/src/PdoConnection.php(196): PDOStatement->execute() #1 /vendors/minphp/record/src/Record.php(793): Minphp\Db\PdoConnection->query() #2 /app/models/packages.php(1518): Minphp\Record\Record->fetch() #3 /app/models/packages.php(650): Packages->getPackagePricing() #4 /app/models/packages.php(577): Packages->appendPackageContent() #5 /app/models/services.php(831): Packages->get() #6 /app/models/services.php(191): Services->appendServiceInfo() #7 /plugins/domains/models/domains_domains.php(94): Services->getList() #8 /plugins/domains/controllers/admin_main.php(881): DomainsDomains->getList() #9 /vendors/minphp/bridge/src/Lib/Dispatcher.php(142): AdminMain->domains() #10 /index.php(21): Dispatcher::dispatch() #11 {main} **E_DEPRECATED general notice, not including 'loses precison' message** general.NOTICE: E_DEPRECATED: Creation of dynamic property NetGeoIp::$SettingsCollection is deprecated {"code":8192,"message":"Creation of dynamic property NetGeoIp::$SettingsCollection is deprecated","file":"/vendors/minphp/bridge/src/Lib/Loader.php","line":256} general.NOTICE: E_DEPRECATED: Creation of dynamic property SimplePie_Autoloader::$path is deprecated {"code":8192,"message":"Creation of dynamic property SimplePie_Autoloader::$path is deprecated","file":"/plugins/feed_reader/vendors/simplepie/autoloader.php","line":67} general.NOTICE: E_DEPRECATED: strpos(): Passing null to parameter #2 ($needle) of type string is deprecated {"code":8192,"message":"strpos(): Passing null to parameter #2 ($needle) of type string is deprecated","file":"/components/upload/upload.php","line":398} general.NOTICE: E_DEPRECATED: Creation of dynamic property NamesiloApi::$logger is deprecated {"code":8192,"message":"Creation of dynamic property NamesiloApi::$logger is deprecated","file":"/components/modules/namesilo/apis/namesilo_api.php","line":93} **A typical 'loses precision' E_DEPRECATION message** general.NOTICE: E_DEPRECATED: Implicit conversion from float 127.34694444444445 to int loses precision {"code":8192,"message":"Implicit conversion from float 127.34694444444445 to int loses precision","file":"/plugins/support_manager/support_manager_controller.php","line":64} This is from the fresh install version, not the copy of production version, as I have turned off cron for the production copy for developer cat general-notice-cron-*.log | cut -d ' ' -f 1 --complement | awk -F, '!seen[]++' | sed 's/\home.*\/blesta\///' general.NOTICE: E_DEPRECATED: Creation of dynamic property TicketManager::$SupportManagerDepartments is deprecated {"code":8192,"message":"Creation of dynamic property TicketManager::$SupportManagerDepartments is deprecated","file":"/vendors/minphp/bridge/src/Lib/Loader.php","line":256} Edited April 8, 2024 by johnhe correct Quote
Paul Posted April 8, 2024 Report Posted April 8, 2024 Thanks, please continue to report any findings in this thread. I've created CORE-5165 so that we can correct as many of these as possible for 5.10.0. Quote
John Heenan Posted April 8, 2024 Author Report Posted April 8, 2024 (edited) Here is a more robust version of the grep_logs script that I am now using, now called grep_blesta_logs. #!/bin/bash # grep_blesta_logs # Parse some blesta logs from blesta install direcory for unique messages # Version 0.1a, Author John Heenan, April 2024 # Reference: https://www.blesta.com/forums/index.php?/topic/25767-e_deprecated-messages/ year=$(date +%Y) cd logs_blesta || exit 1 if ls general-error-${year}-*.log >/dev/null 2>&1; then echo echo echo "**ERROR message, not E_DEPRECATED message**" cat general-error-${year}-*.log | cut -d ' ' -f 1 --complement | awk -F, '!seen[$1]++' | sed 's/\home\S*\/blesta\///g' fi if ls general-notice-${year}-*.log >/dev/null 2>&1; then echo echo echo "**E_DEPRECATED general notice, not including 'loses precison' message**" cat general-notice-${year}-*.log | grep -v 'loses precision' | cut -d ' ' -f 1 --complement | awk -F, '!seen[$1]++' | sed 's/\home.*\/blesta\///' loses_precision=$(cat general-notice-${year}-*.log | grep 'loses precision' | cut -d ' ' -f 1 --complement | head -1 | sed 's/\home.*\/blesta\///') echo echo if [ "$loses_precision" ]; then echo "**A typical 'loses precision' E_DEPRECATION message**" echo "$loses_precision" else echo "**No 'loses precision' messages**" fi fi if ls general-notice-cron-*.log >/dev/null 2>&1; then echo echo echo "Unique cron messages" cat general-notice-cron-*.log | cut -d ' ' -f 1 --complement | awk -F, '!seen[$1]++' | sed 's/\home.*\/blesta\///' else echo echo echo "**Below is from the fresh install version, not the copy of production version into developer version for which cron should not be allowed to run**" echo "cat general-notice-cron-*.log | cut -d ' ' -f 1 --complement | awk -F, '!seen[$1]++' | sed 's/\home.*\/blesta\///'" echo 'general.NOTICE: E_DEPRECATED: Creation of dynamic property TicketManager::$SupportManagerDepartments is deprecated {"code":8192,"message":"Creation of dynamic property TicketManager::$SupportManagerDepartments is deprecated","file":"/vendors/minphp/bridge/src/Lib/Loader.php","line":256}' fi Edited April 8, 2024 by johnhe correct script Quote
John Heenan Posted April 8, 2024 Author Report Posted April 8, 2024 Wasn't doing anything. Numerous different H2o E_DEPRECATED messages have been logged below. Have not got round to making any changes yet. First the new version 0.1b of logs parse script now called grep_blesta_logs #!/bin/bash # grep_blesta_logs # Parse some blesta logs from blesta install direcory for unique messages # Version 0.1b, Author John Heenan, April 2024 # Reference: https://www.blesta.com/forums/index.php?/topic/25767-e_deprecated-messages/ cd logs_blesta || exit 1 year=$(date +%Y) function filter_log() { cut -d ' ' -f 1 --complement | awk -F, '!seen[$1]++' | sed 's/\home\S*\/blesta\///g' } if ls general-error-${year}-*.log >/dev/null 2>&1; then echo echo echo "**ERROR message, not E_DEPRECATED message**" cat general-error-${year}-*.log | filter_log fi if ls general-notice-${year}-*.log >/dev/null 2>&1; then echo echo echo "**E_DEPRECATED general notice, not including 'loses precison' message**" cat general-notice-${year}-*.log | grep -v 'loses precision' | filter_log loses_precision=$(cat general-notice-${year}-*.log | grep 'loses precision' | head -1 | filter_log) echo echo if [ "$loses_precision" ]; then echo "**A typical 'loses precision' E_DEPRECATION message**" echo "$loses_precision" else echo "**No 'loses precision' messages**" fi fi if ls general-notice-cron-*.log >/dev/null 2>&1; then echo echo echo "Unique cron messages" cat general-notice-cron-*.log | filter_log else echo echo echo "**Below is from the fresh install version, not the copy of production version into developer version for which cron should not be allowed to run**" echo "cat general-notice-cron-*.log | filter_log" echo 'general.NOTICE: E_DEPRECATED: Creation of dynamic property TicketManager::$SupportManagerDepartments is deprecated {"code":8192,"message":"Creation of dynamic property TicketManager::$SupportManagerDepartments is deprecated","file":"/vendors/minphp/bridge/src/Lib/Loader.php","line":256}' fi The output: ./grep_blesta_logs **ERROR message, not E_DEPRECATED message** general.ERROR: PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'package_pricing.default' in 'where clause' in /vendors/minphp/db/src/PdoConnection.php:196 Stack trace: #0 /vendors/minphp/db/src/PdoConnection.php(196): PDOStatement->execute() #1 /vendors/minphp/record/src/Record.php(793): Minphp\Db\PdoConnection->query() #2 /app/models/packages.php(1518): Minphp\Record\Record->fetch() #3 /app/models/packages.php(650): Packages->getPackagePricing() #4 /app/models/packages.php(577): Packages->appendPackageContent() #5 /app/models/services.php(831): Packages->get() #6 /app/models/services.php(191): Services->appendServiceInfo() #7 /plugins/domains/models/domains_domains.php(94): Services->getList() #8 /plugins/domains/controllers/admin_main.php(881): DomainsDomains->getList() #9 /vendors/minphp/bridge/src/Lib/Dispatcher.php(142): AdminMain->domains() #10 /index.php(21): Dispatcher::dispatch() #11 {main} **E_DEPRECATED general notice, not including 'loses precison' message** general.NOTICE: E_DEPRECATED: Creation of dynamic property NetGeoIp::$SettingsCollection is deprecated {"code":8192,"message":"Creation of dynamic property NetGeoIp::$SettingsCollection is deprecated","file":"/vendors/minphp/bridge/src/Lib/Loader.php","line":256} general.NOTICE: E_DEPRECATED: Creation of dynamic property SimplePie_Autoloader::$path is deprecated {"code":8192,"message":"Creation of dynamic property SimplePie_Autoloader::$path is deprecated","file":"/plugins/feed_reader/vendors/simplepie/autoloader.php","line":67} general.NOTICE: E_DEPRECATED: strpos(): Passing null to parameter #2 ($needle) of type string is deprecated {"code":8192,"message":"strpos(): Passing null to parameter #2 ($needle) of type string is deprecated","file":"/components/upload/upload.php","line":398} general.NOTICE: E_DEPRECATED: Creation of dynamic property NamesiloApi::$logger is deprecated {"code":8192,"message":"Creation of dynamic property NamesiloApi::$logger is deprecated","file":"/components/modules/namesilo/apis/namesilo_api.php","line":93} general.NOTICE: E_DEPRECATED: Creation of dynamic property H2o::$options is deprecated {"code":8192,"message":"Creation of dynamic property H2o::$options is deprecated","file":"/h2o/h2o.php","line":55} general.NOTICE: E_DEPRECATED: Creation of dynamic property H2o_Parser::$options is deprecated {"code":8192,"message":"Creation of dynamic property H2o_Parser::$options is deprecated","file":"/h2o/h2o/parser.php","line":56} general.NOTICE: E_DEPRECATED: Creation of dynamic property H2o_Lexer::$options is deprecated {"code":8192,"message":"Creation of dynamic property H2o_Lexer::$options is deprecated","file":"/h2o/h2o/parser.php","line":7} general.NOTICE: E_DEPRECATED: Creation of dynamic property H2o_Lexer::$pattern is deprecated {"code":8192,"message":"Creation of dynamic property H2o_Lexer::$pattern is deprecated","file":"/h2o/h2o/parser.php","line":13} general.NOTICE: E_DEPRECATED: Creation of dynamic property H2o_Parser::$lexer is deprecated {"code":8192,"message":"Creation of dynamic property H2o_Parser::$lexer is deprecated","file":"/h2o/h2o/parser.php","line":62} general.NOTICE: E_DEPRECATED: Creation of dynamic property H2o_Token::$type is deprecated {"code":8192,"message":"Creation of dynamic property H2o_Token::$type is deprecated","file":"/h2o/h2o/datatype.php","line":110} general.NOTICE: E_DEPRECATED: Creation of dynamic property H2o_Token::$content is deprecated {"code":8192,"message":"Creation of dynamic property H2o_Token::$content is deprecated","file":"/h2o/h2o/datatype.php","line":111} general.NOTICE: E_DEPRECATED: Creation of dynamic property H2o_Token::$result is deprecated {"code":8192,"message":"Creation of dynamic property H2o_Token::$result is deprecated","file":"/h2o/h2o/datatype.php","line":112} general.NOTICE: E_DEPRECATED: Creation of dynamic property H2o_Token::$position is deprecated {"code":8192,"message":"Creation of dynamic property H2o_Token::$position is deprecated","file":"/h2o/h2o/datatype.php","line":113} general.NOTICE: E_DEPRECATED: Creation of dynamic property H2o_Parser::$tokenstream is deprecated {"code":8192,"message":"Creation of dynamic property H2o_Parser::$tokenstream is deprecated","file":"/h2o/h2o/parser.php","line":63} general.NOTICE: E_DEPRECATED: Creation of dynamic property H2o_Parser::$searching is deprecated {"code":8192,"message":"Creation of dynamic property H2o_Parser::$searching is deprecated","file":"/h2o/h2o/parser.php","line":99} general.NOTICE: E_DEPRECATED: Creation of dynamic property H2o_Parser::$token is deprecated {"code":8192,"message":"Creation of dynamic property H2o_Parser::$token is deprecated","file":"/h2o/h2o/parser.php","line":92} general.NOTICE: E_DEPRECATED: Creation of dynamic property If_Tag::$args is deprecated {"code":8192,"message":"Creation of dynamic property If_Tag::$args is deprecated","file":"/h2o/h2o/tags.php","line":80} general.NOTICE: E_DEPRECATED: Creation of dynamic property H2o::$nodelist is deprecated {"code":8192,"message":"Creation of dynamic property H2o::$nodelist is deprecated","file":"/h2o/h2o.php","line":150} general.NOTICE: E_DEPRECATED: Creation of dynamic property H2o::$stream is deprecated {"code":8192,"message":"Creation of dynamic property H2o::$stream is deprecated","file":"/h2o/h2o.php","line":142} general.NOTICE: E_DEPRECATED: Creation of dynamic property SimplePie_Sanitize::$registry is deprecated {"code":8192,"message":"Creation of dynamic property SimplePie_Sanitize::$registry is deprecated","file":"/plugins/feed_reader/vendors/simplepie/library/SimplePie/Sanitize.php","line":100} general.NOTICE: E_DEPRECATED: Creation of dynamic property SimplePie_Locator::$dom is deprecated {"code":8192,"message":"Creation of dynamic property SimplePie_Locator::$dom is deprecated","file":"/plugins/feed_reader/vendors/simplepie/library/SimplePie/Locator.php","line":77} **A typical 'loses precision' E_DEPRECATION message** general.NOTICE: E_DEPRECATED: Implicit conversion from float 127.34694444444445 to int loses precision {"code":8192,"message":"Implicit conversion from float 127.34694444444445 to int loses precision","file":"/plugins/support_manager/support_manager_controller.php","line":64} **Below is from the fresh install version, not the copy of production version into developer version for which cron should not be allowed to run** cat general-notice-cron-*.log | cut -d ' ' -f 1 --complement | awk -F, '!seen[]++' | sed 's/\home.*\/blesta\///' general.NOTICE: E_DEPRECATED: Creation of dynamic property TicketManager::$SupportManagerDepartments is deprecated {"code":8192,"message":"Creation of dynamic property TicketManager::$SupportManagerDepartments is deprecated","file":"/vendors/minphp/bridge/src/Lib/Loader.php","line":256} Quote
John Heenan Posted April 10, 2024 Author Report Posted April 10, 2024 Latest batch of unique log entries with latest version of filter script, now called filter_blesta_logs, now more generally useful and now requiring arguments The results in file unique_log_entries.txt got by placing script in Blesta install directory and running ./filter_blesta_logs c s e w n > unique_log_entries.txt No cron results (for reason mentioned above). Going to swap in another backup, upgrade it to Blesta 5.10.0 beta 1 and run cron to get cron entries. Quote
John Heenan Posted April 13, 2024 Author Report Posted April 13, 2024 A new batch from an upgraded backup with cron running in attached log file unique_log_entries.txt Also attached is latest version of script file filter_blesta_logs.sh. Extension .sh added so as not to cause alarm with downloads and file viewers. Slight difference in way shell called. Single paramer a is equivalent to parameters c s e w n (cron and server logs of error, warning and notice files). From blesta install directory: ./filter_blesta_logs.sh a > unique_log_entries.txt # don't forget the a parameter! When the next beta comes out I will repeat the procedure for two upgraded versions. Quote
wicka Posted June 14, 2024 Report Posted June 14, 2024 Looks like still have these E_DEPRECATED logs on 5.10.0 (not beta) May I report in this thread? see attached. blesta_5.10.0_E_DEPRECATED_php82.txt.gz Quote
John Heenan Posted June 14, 2024 Author Report Posted June 14, 2024 (edited) 7 hours ago, wicka said: May I report in this thread? see attached. Thanks for the report. For others, the attched file is 9.2MB of deprecated messages logged mainly from files originating in vendors/blesta/h2o/h2o directory. Below I deal with a specific fix for a reported message and an example of an appoach that made 80 IDE reported error messages disappear for a single file with a two line fix, that may also be reported in messages. A specific fix that fixed five errors in one go when fixing one: Here is one of the reported messages: ... general.NOTICE: E_DEPRECATED: ...{"code":8192,"message":"Creation of dynamic property H2o_Token::$type is deprecated","file":".../vendors/blesta/h2o/h2o/datatype.php","line":110} Download the source code, open in VSCode, use a php extension such as inteliphense and hover over red underlined part of line 110 to see undefined property type message. All five red lines disappear with one line added: protected mixed $type, $content, $result, $position; A more general approach that fixed 80 reported IDE errors in one go: There may be an incredibly easy to fix a lot more very quickly that I have noted to try. Just poking around within VSCode IDE shows file components/invoice_templates/perforated_invoice/perforated_invoice_pdf.php has 81 problems: Who wants to fix problems like this? However, with a change of two lines from to I can make 80 of 81 reported problems disappear. Edited June 14, 2024 by John Heenan remove repeated images and clarify Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.