Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
565 views
in Technique[技术] by (71.8m points)

static - PHP: persistent variable value

I have to read a file and do some computation, than save the result of this computation inside a variable.

I just need to do this once. In Java + Servlet I can do this using a servlet container and, for instance, the singleton pattern.

I know that in PHP I can't act like this. Which is the better way to do this? Save the computation (or transfer the data) on DB?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

No, it won't work like with Java Servlets. You'll have to find a workaround.

First, I assume that using $_SESSION, $_COOKIE or $_REQUEST in general isn't practicable to you as you want to save the state per server (or per application) and not per 'User Session'.

Using a database sounds practicable in your case. In a regular application design it will be the most common solution.

Also you can do something like this, using the serialization capabilities of PHP:

<?php

$resultfile = 'result.dat';
if(!file_exists($resultfile)) {
    $result = compute_result('foo bar');
    file_put_contents($resultfile, serialize($result));
} else {
    $result = unserialize(file_get_contents($resultfile));
}

Using PHP's serialize() attempt is especially practicable when

  • You are in a PHP only environment
  • $result is a complex datatype but you don't want to create a database structure and map $result too it

If you are not in a PHP only environment you might prefer other serialization formats as JSON or XML.

Also the serialization result can be stored as a string in a database instead of a file. Saving it to a database instead of a file would make the application more scalable as the result would be available to all servers that access the same database (cluster).

In short: I would suggest using a database maybe combined with serialization.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...