• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 573
  • Last Modified:

Most effective way to execute PHP CLI scripts?

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
Geoff Millikan
Asked:
Geoff Millikan
  • 4
  • 4
  • 3
3 Solutions
 
Beverley PortlockCommented:
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
 
DrDamnitCommented:
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
 
Geoff MillikanAuthor Commented:
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
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
DrDamnitCommented:
"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
 
Beverley PortlockCommented:
"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
 
DrDamnitCommented:
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
 
Geoff MillikanAuthor Commented:
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
 
Beverley PortlockCommented:
"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
 
Geoff MillikanAuthor Commented:
...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
 
Beverley PortlockCommented:
" 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
 
Geoff MillikanAuthor Commented:
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

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 4
  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now