Solved

Most effective way to execute PHP CLI scripts?

Posted on 2011-03-21
11
544 Views
Last Modified: 2012-05-11
http://www.php-cli.com/php-cli-tutorial.shtml

The tutorial above says that it's ugly and ineffective to run a PHP CLI script like this:
#> /usr/bin/php /path/to/script/test.php

Open in new window

And that it's much better to code it like a bash script like this:
#!/usr/bin/php -q
<?php
echo "Hello world of PHP CLI!";
?>

Open in new window

And then run it like this:
#> chmod 755 /path/to/script/bash_formatted_test.php
#> ./path/to/script/bash_formatted_test.php

Open in new window


Why is the second way better?

Thanks,

http://www.t1shopper.com/

PS. The PHP tutorial doesn't indicate if there's a preferred method:
http://www.php.net/manual/en/features.commandline.usage.php
0
Comment
Question by:Geoff Millikan
  • 4
  • 4
  • 3
11 Comments
 
LVL 34

Expert Comment

by:Beverley Portlock
ID: 35183687
If you are on Linux then have you considered using the Lynx browser? It saves you having to configure and use the CLI version and if it works in a normal browser then it works in Lynx as well. Scripts can be executed as

lynx -dump http://www.example.com/path/to/script.php
0
 
LVL 32

Expert Comment

by:DrDamnit
ID: 35183949
The second way is the preferred way of running the script because you're telling BASH to use the php cli interpreter in that first line.

The secondary part (changing file permissions) is required to make something executable.

I agree with the tutorial.
0
 

Author Comment

by:Geoff Millikan
ID: 35184043
bportlock: I don't need or want to use a web browser, we want to execute PHP as CLI.  For example, as a cron job.  Any insight on the question at hand?

DrDamnit: Why is that better?  Is it because it's "cleaner and more straightforward" or is there some efficiency to be gained in the form of a more direct path to the binary which results in less system bus usage, or maybe less RAM used, etc ?
0
 
LVL 32

Assisted Solution

by:DrDamnit
DrDamnit earned 150 total points
ID: 35184246
"cleaner and more straightforward". Exactly.

Plus, you don't have to worry about fat-fingering arguments to the php command line.

I have extremely complicated PHP scripts that also launch MP3 encoders to grab calls when they interface with my phone system, then it queries databases, and other bash scripts scripts all running off that style of php script.
0
 
LVL 34

Assisted Solution

by:Beverley Portlock
Beverley Portlock earned 350 total points
ID: 35184292
"we want to execute PHP as CLI.  For example, as a cron job.  Any insight on the question at hand?"

I execute my scripts via cron using Lynx, for example

* 0,6,12,18 * * * lynx -dump http://www.example.com/script.php?param=1234

I've never found CLI to be worth the bother. Also I endorse Dr Damnit's comments above about replacing the shebang line with #!/usr/bin/php -q
0
Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
LVL 32

Expert Comment

by:DrDamnit
ID: 35184317
I also endorse bportlock's lynx trick. Never though of that, but it will work just the same.

6 in one hand, half a dozen in the other.

The only advantage you have with CLI is if you want to write to the screen while running a script. I am OCD with outputs, so I like to watch the pretty letters scream by....

opening file SOMEFILE....[OK]
Sending email to drdamnit@awesomeness.com....[OK]


and that jazz.

But if you don't need / want that, either way is sufficient.
0
 

Author Comment

by:Geoff Millikan
ID: 35190154
Very interesting.  Using lynx has the advantage of caching content (if that is desired) but has the disadvantage of using up extra overhead of an Apache process.  Executing the PHP script via CLI SAPI means no Apache resources are consumed which seems a bit more efficient unless I'm missing something?

So it's no more effective (at least when executing CLI scripts) to run them one way over another.  The different styles are merely presentational preferences, right?
0
 
LVL 34

Accepted Solution

by:
Beverley Portlock earned 350 total points
ID: 35191014
"Executing the PHP script via CLI SAPI means no Apache resources are consumed which seems a bit more efficient unless I'm missing something?

Running the CLI-PHP is not resource free either, no matter how you run it it will require resources. Unless your machine is very, very tight on its resource allocation then it will not make much difference which way you do this. I certainly wouldn't worry about the machine complaining or wanting extra days off......


"So it's no more effective (at least when executing CLI scripts) to run them one way over another.  The different styles are merely presentational preferences, right?"

To an extent.... the major difference is that using Lynx you need only ever worry about the one php.ini file and the system is constrained to work within Apache's framework and constraints. In short you do not have to worry about setting up, maintaining and testing TWO environments. It also means that the job runs as www / www-data / wwrun / apache with all the permissions and access restrictions that that implies. The big plus is that if the script works in FireFox or IE I know it will run under Lynx, but if I run it under CLI then some error (usually permissions or a missing extension not enabled in CLI) can stop the script dead in its tracks. Using Lynx makes my life easier.

It is a choice and my preference is to keep PHP boxed up inside the webroot as much as possible so I never enable CLI.
0
 

Author Comment

by:Geoff Millikan
ID: 35363007
...you need only ever worry about the one php.ini file...

I thought there was only one php.ini file which was always used?  Are you saying I can specify one for the web server (libphp5.so) and another for CLI?
0
 
LVL 34

Expert Comment

by:Beverley Portlock
ID: 35373376
" Are you saying I can specify one for the web server (libphp5.so) and another for CLI?"

Yes you can do exactly that. The -c swith on the PHP command lets you specify the php.ini to use.

http://www.php.net/manual/en/features.commandline.options.php (scan for --php-ini )
0
 

Author Comment

by:Geoff Millikan
ID: 35438325
Ah, that has a distinct advantage in that now I can configure my php-apache.ini file a lot smaller than my php-cli.ini file.  For example, I'm reducing the amount of memory and the execution time in php-apache.ini and in increasing those things in php-cli.ini.

Very nice.
0

Featured Post

Easy Project Management (No User Manual Required)

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Introduction Many web sites contain image galleries; a common design for these galleries includes a page with a collection of thumbnail images.  You can click on each of the thumbnail images to see the larger version of the image.  This is easily i…
This article will explain how to display the first page of your Microsoft Word documents (e.g. .doc, .docx, etc...) as images in a web page programatically. I have scoured the web on a way to do this unsuccessfully. The goal is to produce something …
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now