我有一个我在script1.php中评估的字符串。我需要将此字符串传递给script2.php。我不想将字符串嵌入到URL中然后传递。这样做还有其他办法吗?
答案 0 :(得分:2)
解决这个问题有不同的可能性。 你提到的第一个是 GET 。 (例如,作为链接,甚至通过curl或AJAX隐藏。使用curl PHP进行调用。使用AJAX,调用在服务器上完成,以便用户可以在源代码中看到字符串)
发表强>
第二种方法是通过POST。
使用script1.php创建一个HTML表单,让它将响应发送到script2.php
<form method="post" action="script2.php">
<input type="hidden" name="myString" value="myValue" />
<input type="submit" style="/*you can stile me like a link*/" value="Click me" />
</form>
现在您可以通过以下方式在script2.php中使用此字符串
<?php
$myString = null;
if(isset($_POST['myString')) $myString = $_POST['myString'];
?>
文件强>
如果这两个脚本位于同一服务器上,则可以使用文件。在这种情况下,每个请求都会看到字符串script1.php已创建。
<?php
$myString = "myValue";
file_put_contents("myString.txt", $myString);
?>
现在script2.php可以读取文件的内容并使用它。
<?php
$myString = file_get_contents("myString.txt");
?>
数据库/其他应用程序或后台工作者
另一种可能性(非常类似于文件)是将字符串存储在数据库中的方式。然后,您可以再次读取该值并在script2.php中使用它。 如果您可以全局访问数据库,您甚至可以将字符串从一个服务器分发到另一个服务器,就像使用GET或POST一样。
您甚至可以启动为您存储信息的本地应用程序(具有exec功能)。然后,script2.php可以再次执行以获取新应用程序的值
<强>缓存强>
您肯定可以将字符串保存在Cookie中。如果浏览器允许,您可以使用script2.php
阅读它script1.php
<?php
$myString = "myValue";
setcookie('MyString', $myString);
?>
script2.php
<?php
$myString = null;
if(isset($_COOKIE['MyString'])) $myString = $_COOKIE['MyString'];
?>
使用此解决方案,您的数据将存储在客户端。如果用户愿意,用户可以查看,更改和操作数据。另一方面,您可以节省服务器上的存储空间。
本地存储
与Cookie类似,您可以使用JavaScript代码将数据存储在本地存储中。本地存储仅在客户端。如果你想获取script2.php上的数据,你必须通过AJAX调用它。现在您可以处理数据了。
script1.php
<?php $myString = "myValue"; /*Be careful. your string must not contain ' otherwise you have to escape it!*/ ?>
<script type="text/javascript">
localStorage.setItem('myString', '<?php echo $myString; ?>');
</script>
script2.php
<?php
if(!isset($_GET['myString'])){
?>
<div id="content"></div>
<script type="text/javascript">
var xhReq = new XMLHttpRequest();
xhReq.open("GET", "script2.php?myString="+localStorage.getItem("myString"), false); //Be careful! You have to urlescape the value if necessary
xhReq.send(null);
var serverResponse = xhReq.responseText;
document.getElementById("content").innerHtml = serverResponse; //Be careful. Escape HTML Tags if necessary here
</script>
<?php
}
else{
$myString = $_GET['myString'];
}
?>
<强> SESSION 强>
通常的方式是会话。这将机器上的本地存储(如文件)与参数方法(COOKIE,GET或POST)组合在一起 信息存储在具有某个ID的服务器上。使用参数方法将此ID从一侧传送到另一侧。
script1.php
<?php
session_start();
$myString = 'myValue';
$_SESSION['myString'] = $myString;
?>
script2.php
<?php
session_start();
$myString = null;
if(isset($_SESSION['myString'])) $myString = $_SESSION['myString'];
?>
如果你使用外部程序,肯定会有更多。 如果可以通过外部库使用Websockets,则可以使用它们。或其他任何东西。
<强> BUT:强> 您无法在无限循环中使用GET,POST,SESSION。我建议使用外部应用程序或文件。因为PHP在一个脚本中立即处理每个请求。如果您向我提供有关“频繁循环”的更多信息,我可以尝试帮助您找到解决该特殊问题的方法。