Jump to content


  • Content count

  • Joined

  • Last visited

Community Reputation

1 Neutral

About sylvest

  • Rank
    Distant Family
  1. I have a requirement for my PHP pages sometimes to send files (e.g. images, CSS files, JS files, fonts) to the client. The normal way to do this seems to be to use the readfile() function, but I understand that this reads the whole file into memory and then sends it to the client, which will cause problems if it is a very large file. I understand that there is an Apache module mod_xsendfile which does a better job, but Support tell me that this is not available on my shared server. So my question is, what is the best/most efficient way of sending files to the client in PHP, without mod_xsendfile? Do I have to write a loop that reads the file a few K at a time and sends each chunk to the client before reading the next? If so, has anyone got this code already working that they would be happy to share with me, to save a bit of time? Thanks - Rowan
  2. Hi, I have an HTML form with a large number of inputs on it. Most of them are <select> elements each with 6 options. There are currently 1295 of these selects, plus a few other inputs, but the number is not constant, since the form is generated dynamically, and it depends on the number of rows and the number of columns for the currently selected period. In the $_POST array it seems that I am only receiving 1000 values, which means that some of the ones I need I am not receiving. I have tried changing the value of max_input_vars in /home/myaccount/public_html/php.ini from 1000 to 10000, but this does not seem to have improved anything. Do I have to do anything (e.g. restart the server) for it to read this file? Or is this the wrong way of changing this limit? Or do I need to reduce the number of inputs in some way (it's not easy to see a way to do this without a lot of Javascript, which I have been trying to avoid). Thanks - Rowan
  3. sylvest

    Mysql Syntax Being Rejected

    I have the following SQL being executed by a mysqli_query() statement in my PHP code: DROP TEMPORARY TABLE IF EXISTS tmptable; CREATE TEMPORARY TABLE tmptable SELECT * FROM Members WHERE MemberId = '105' AND Status > '0'; UPDATE tmptable SET RecordId = '', Status = '0', ChangedBy = '4', ChangedOn = '2017-05-21 19:03:39'; UPDATE Members SET Status = '0' WHERE MemberId = '105' AND Status > '0'; INSERT INTO Members SELECT * FROM tmptable; It is being rejected with the following error: Errno: 1064 Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TEMPORARY TABLE tmptable SELECT * FROM Members WHERE MemberId = '105' AND' at line 1 at line 952 in file: /home/sylvest/public_html/swchoir/edit_member.php If I put the same SQL into the SQL tab in phpMyAdmin, it works fine. What do I have to do to make this work in my PHP code? Thanks - Rowan
  4. I have a web page which under certain conditions forwards to another one using the statement: header($next_page); where $next_page == "Location: http://www.sylvesterbradley.org/swchoir/index.php?v=1493894983" This causes a 500 error. I am reasonably sure that I have sent no output at all (other than to a log file) before the header statement. In any case, on other occasions where I have done this I seem to get a warning, which in this case is not happening. I see nothing in any error_log files that I am aware of (that is /home/sylvest/error_log and /home/sylvest/pubic_html/swchoir/error_log) nor do I see anything relevant in the cPanel Errors list. What am I doing wrong? How can I debug what is happening? I have a log statement early in the redirected-to file (index.php) and this does not seem to be being triggered, so I don't think it is ever executing this file. Thanks - Rowan
  5. I am trying to use the PHP password hashing module in my code, but the following line: $hasher = new PasswordHash(8, false); is giving me the error: Fatal error: Class 'PasswordHash' not found in /home/myaccount/public_html/directory/edit_member.php on line 124 I am running PHP version 5.6.30. I thought that all versions from 5.5.0 onwards had this module? What do I have to do to enable me to use this? Thanks - Rowan
  6. sylvest

    Running Php File From Cron Job

    Here's an error reported from last night's attempt to run my PHP file in a cron job: Failed loading /opt/cpanel/ea-php54/root/usr/lib64/php/modules/ioncube_loader_lin_5.4.so: /opt/cpanel/ea-php54/root/usr/lib64/php/modules/ioncube_loader_lin_5.4.so: undefined symbol: execute Zend Guard Loader requires Zend Engine API version 220100525. The Zend Engine API version 220131226 which is installed, is newer. Contact Zend Technologies at http://www.zend.com/ for a later version of Zend Guard Loader. Set-Cookie: PHPSESSID=p4nu293cl2kikl2tb7t7ooo4j6; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-type: text/html; charset=UTF-8 <br /> <b>Fatal error</b>: Class 'PasswordHash' not found in <b>/home/myaccount/include/do_email.php</b> on line <b>153</b><br /> Questions arising: Why am I getting the undefined symbol: execute error? This seems to be something to do with loading PHP, before it has ever tried to access my script. Why is the session cookie that it is sending set to Expires: Thu, 19 Nov 1981? Why has it failed to find PasswordHash? This file runs correctly when called as part of my website, so I think the problems must be to do with diffferences between the environment when run as a web page and when run as a cron job. Thanks - Rowan
  7. sylvest

    Why Can't I Paste Text

    Well, it sort of helps. Thanks for providing this link. But I think my most straightforward answer is to remember to use Firefox or Chrome if I want to access the TCH forum. Of course I will usually forget this until I find that I can't paste :-(. Thanks - Rowan
  8. sylvest

    Getting Mod_Rewrite To Work

    Bruce, Thanks for your reply. Why is it that I can't do an internal rewrite to a location above public_html? Here is an exerpt from http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule The Substitution of a rewrite rule is the string that replaces the original URL-path that was matched by Pattern. The Substitution may be a: file-system path Designates the location on the file-system of the resource to be delivered to the client. Substitutions are only treated as a file-system path when the rule is configured in server (virtualhost) context and the first component of the path in the substitution is exists in the file-system So I guess this is saying that what I'm trying to do won't work in an .htaccess file. But is there a way that I can make it work in my Virtual Host config file? Surely there cabn;t be any fundamental reason why I can;t redirect to a file system diretory above public_html? I can after all include any of these files, which is pretty close to the same thing? Thanks - Rowan
  9. sylvest

    Getting Mod_Rewrite To Work

    I have found many discussions on the web around this topic. Some say that a rewrite rule assumes that the redirect path is a file system path if the first element of the path (/home in this case) exists at the root of the file system (which it obviously does in this case). Otherwise it assumes that it is relative to the Document Root. Other people imply that redirect to a file system path is not permitted for .htaccess files for security reasons, but that you can use an Alias as a work around. Is it in fact possible to write a RewriteRule that will work in an .htaccess file on a TCH server to redirect to a file system path? How exactly do I do this? If not, is it possible to use an Alias (which would presumably point to a file system path from a web URL)? If so, how do I do this? You may ask - why do I want to do this? The answer is that I prefer to keep all the files that I include or redirect to in non web accessible places, to minimise the chance that someone can deduce or guess the names of these files, and then download them, and see the inner workings of my web site, security system etc,. thus compromising my security. I find it difficult to believe given all the things that mod_rewrite can do, that it can't do this... Thanks - Rowan
  10. sylvest

    Getting Mod_Rewrite To Work

    I am trying to come up with a way of redirecting all requests for files in the directory http://mydomain/swchoir/<filename> to the file with the same name (and the same GET parameters if present) in the directory /home/myaccount/build00001/public_html/swchoir/<filename>. My end objective is to allow the server to contain several different builds and for people who have the necesary permissions to be able to choose which one they want to look at, so for example I could have one build that is on public release, another that is in QA, and a third which is in development. Ordinary users would only be able to see the public release one. QA people would be able to see either the public release or the QA build. And developers would be able to see all of them. As a step towards this, I am trying to develop some rewrite rules that will send _all_ users to build00001. The lines I have added to the .htaccess file in /home/sylvest/public_html are: SetEnvIfExpr True build_num=00001 Rewrite Rule ^swchoir/([0-9a-z/\.?&_=-]+)$ /home/myaccount/buildbuild_num/public_html/swchoir/$1 [NC, L] php_value include_path ".:/home/myaccount/buildbuild_num/include" Now when I try to access a page I get an internal server error. Please can you suggest what is wrong with my rule, or how to best get this to do what I want? In particular I'm not sure how to use the Environmental Variable build_num that I have tried to define. I'm not sure whether "SetEnvIfExpr True" is valid, and I'm not sure whether "sylvest/buildbuild_num/public_html" is a valid way of using the variable. Seems unlikely, but I'm not sure whether it needs some kind of quotes to indicate that it is a variable name, and if so, what kind. If you know a better way of doing the whole job, please tell me that too. It seems odd to me that something like this doesn't already exist somewhere, since it surely must be a commmon need. Thanks - Rowan
  11. sylvest

    Running Php File From Cron Job

    Thank you. I think you can close this ticket now. If I can't get the cron job to work properly after sorting out the INI file I will raise another one. Thanks - Rowan
  12. sylvest

    Running Php File From Cron Job

    Balakrishnan, Thanks for your help with this. Just out of interest, where is "the crontab entry"? Where can I see this, just so I understand what you have done? I will look at simplifying the php.ini file as you suggest, although I may need to ask which entries are necessary and which are not. Thanks again for your help. The excellent support that the TCH team provides is one of the main reasons I stick with you. Rowan
  13. Bryan, Thanks for your help with this. Now the system error log is reporting the correct time in GMT with DST, but the PHP log is still reporting GMT without DST. I have removed all the calls to date_default_timezone_set() in my PHP files but it is still the same. To generate the PHP log my code is: $logmsg = gmdate("[d-M-Y H:i:s e I P T] ") . "on " . $hostname . " " . $loglevels[$level] . " " . $msg . " at line " . $line . " in file " . $file . PHP_EOL; The text produced in the log file is (example): [10-Apr-2017 11:47:18 UTC 0 +00:00 GMT] on localhost L_TRACE Redirecting to Location: http://www.sylvesterbradley.org/swchoir/welcome.php using header at line 302 in file /home/xxx/include/initialise.php Any idea why it is doing this, or what I can do to correct it? Please can you explain how the date.timezone = in the PHP.ini file interacts with the date_default_timezone_set() in a PHP file. Does one override the other? Which takes precedence? Or if I use one, does using the other cause an error? Which way round? Ideally I would like the PHP file to determine which timezone it uses, if necesary overriding what is written in the PHP.ini file, since one section of the web site may require a different timezone than another. Or I may want to reflect the timezone of the particular user that has logged on. Thanks - Rowan
  14. sylvest

    Running Php File From Cron Job

    It tried to run the job last night. I noticed the following from my log: [10-Apr-2017 02:07:32 UTC 0 +00:00 GMT] on L_TRACE REQUEST_URI = / at line 82 in file /home/xxx/include/basic_init.php [10-Apr-2017 02:07:32 UTC 0 +00:00 GMT] on L_TRACE SERVER_NAME = xxx.yyy.org at line 83 in file /home/sylvest/include/basic_init.php Where are these values coming from when the file is run in a cron job? The subdomain xxx.yyy.org does exist, from some work I did in the past, but I'm not using it currently. So how has it deduced that this is the Server? These values are returned correctly when I am running as a result of an HTTP request. Is there some way I can detect, in the script, that it is running in a Cron job, and in that case ignore these values? Thanks - Rowan
  15. Is it possible to run a PHP program from a cron job? I am trying to do this, and have set up a cron job to run /home/myaccount/include/do_email.php once per day at 3am. It attempts to do it, but fails as follows: [06-Apr-2017 20:49:33 America/Detroit] PHP Warning: require_once(basic_init.php): failed to open stream: No such file or directory in /home/xxxx/public_html/swchoir/index.php on line 2 [06-Apr-2017 20:49:33 America/Detroit] PHP Fatal error: require_once(): Failed opening required 'basic_init.php' (include_path='.:/opt/cpanel/ea-php56/root/usr/share/pear') in /home/xxxx/public_html/swchoir/index.php on line 2 My first question is, why is it trying to run index.php, which is my default page, but is not involved in do-email.php at all, as far as I can see. The second question is why is the include path set to '.:/opt/cpanel/ea-php56/root/usr/share/pear'? I have the following in my php.ini file: include_path = ".:/home/myaccount/include:/usr/lib/php:/usr/local/lib/php" Which works fine when running the PHP files as part of web pages, but it seems that this is not working in a cron job. I hope you can help me put my finger on why this is not working. Thank you - Rowan