将JavaScript变量设置为等于PHP变量

时间:2014-04-12 06:31:28

标签: javascript php facebook bitcoin

我在GitHub上下载了某人的项目,该项目使Facebook用户能够相互发送比特币。他在一年前放弃了开发,我想构建自己的应用程序,但我目前正在查看他的代码并尝试设置我的开发环境。

我理解PHP有点,它意味着服务器端脚本,并且JavaScript在客户端机器上执行(所有在浏览器中,Node.js是服务器端框架)

无论如何,他正在做一些奇特的事情,并且产生错误。

目录结构如下:

inc/
  init.php
  app.php
  btc.php
index.php
settings.php

有更多文件,但我认为上述就足够了。
所以我运行命令“php -S localhost:8000”并启动服务器

我转到localhost,一旦页面呈现我在终端中收到这些错误:

[Sat Apr 12 02:23:11 2014] PHP Notice:  Undefined variable: app_url in /home/arthur/projects/bfb/index.php on line 21

[Sat Apr 12 02:23:11 2014] PHP Notice:  Undefined variable: callback_url in /home/arthur/projects/bfb/index.php on line 22

[Sat Apr 12 02:23:11 2014] PHP Fatal error:  Call to undefined function get_x_rates() in /home/arthur/projects/bfb/index.php on line 23

[Sat Apr 12 02:23:11 2014] 127.0.0.1:59511 [200]: / - Call to undefined function get_x_rates() in /home/arthur/projects/bfb/index.php on line 23

[Sat Apr 12 02:23:11 2014] 127.0.0.1:59512 [200]: /stylesheets/reset.css

[Sat Apr 12 02:23:11 2014] 127.0.0.1:59513 [200]: /stylesheets/btc.css

[Sat Apr 12 02:23:11 2014] 127.0.0.1:59514 [200]: /javascript/chosen.css

[Sat Apr 12 02:23:21 2014] 127.0.0.1:59515 Invalid request (Unexpected EOF)

[Sat Apr 12 02:23:21 2014] 127.0.0.1:59516 Invalid request (Unexpected EOF)

index.php文件具有以下一般结构:

<?php
//error_reporting(E_ALL);
//ini_set("display_errors", 1);

require 'settings.php';

require 'inc/btc.php';
require 'inc/app.php';

require 'inc/init.php';

?>
<!DOCTYPE html>
<html xmlns:fb="http://www.facebook.com/2008/fbml">
    <head>
        <meta charset="utf-8" />
        <title>Bitcoin Transactions</title>
        <link rel="stylesheet" href="stylesheets/reset.css" type="text/css" />
        <link rel="stylesheet" href="stylesheets/btc.css" type="text/css" />
        <link rel="stylesheet" href="javascript/chosen.css" type="text/css" />
        <script>var appurl='<?=$app_url?>',
                    hosturl='<?=$callback_url?>',
                    rates=<?=get_x_rates()?>;</script>
        <script type="text/javascript" src="javascript/jquery-1.7.1.min.js">    </script>
    <script type="text/javascript" src="javascript/chosen.jquery.min.js"></script>
    <script type="text/javascript" src="javascript/btc.js"></script>
</head>

<body>
 ....
</body>
</html>

由于他在html文件的开头加载PHP文件,为什么它不能看到我在这个settings.php文件中定义的变量:

<?
$bucket_addr='-taken-out-for-Stack-Overflow';
$callback_url='https://super-lame-name-1231232.herokuapp.com/';
$app_url='https://apps.facebook.com/c------------------n';
$blockchain_guid="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
$blockchain_pw="xxxxxxxxxxxxxxxx";
$fb_settings=array(
  'appId'  => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
);
$fb_tx_fee=10000; //in satoshi (0.0001 BTC)
$btc_tx_fee=50000; //in satoshi (0.0005 BTC)
$tx_per_page=10;
$revert_duration="60 days";

感谢您的帮助!!

12 个答案:

答案 0 :(得分:3)

可能不是全貌,但我之前遇到过服务器设置的问题。也许你的服务器不支持&lt;?=的php echo短代码。所以我建议尝试这个,替换:

<script>
    var appurl='<?=$app_url?>',
        hosturl='<?=$callback_url?>',
        rates=<?=get_x_rates()?>;
</script>

使用:

<script>
    var appurl='<?php echo $app_url; ?>',
        hosturl='<?php echo $callback_url; ?>',
        rates=<?php get_x_rates(); ?>;
</script>

在我的本地机器上有所作为。可能有帮助。祝你好运。

答案 1 :(得分:2)

也许您的php.ini设置时没有激活短标签,请检查您的php.ini设置(short_open_tag)。

或者您可以尝试将<?替换为<?php

答案 2 :(得分:2)

尝试将<?的{​​{1}}替换为settings.php

答案 3 :(得分:1)

我的建议是通过使用体面的PHP IDE 来减少神秘的猜测,在错误日志中显示的行处设置断点并使用break-on-exception功能,以便IDE在检测到时停止问题。体面的IDE通常还内置了代码验证器,因此即使不运行代码,IDE也可能会向您显示错误(很可能是在处理不稳定的废弃代码时)。

  • 具有成熟调试器的PHP IDE和异常突破功能是NuSphere's PhpED - 据我所知#1 PHP调试器

  • PHP IDE具有非常强大的成熟代码分析器(他们称之为“检查”),显示许多潜在问题而无需运行代码JetBrains's PhpStorm - #1 PHP代码据我所知,分析仪

答案 4 :(得分:1)

以下是我的想法。

php.ini中的short_open_tag确实已关闭。 文件index.php在代码中使用标记<?php<?=,两者都有效。 因此php能够阅读这些内容 但是,文件settings.php以短标记<?开头,因此导入这段代码时不会被视为php代码。

PHP也可以导入文件(因为需求在index.php并且能够搜索变量。但由于变量是在无法读取为PHP的文件中定义的,因此它会抛出{ {1}}错误。

因此,您应该在要导入的所有文件中使用undefined标记而不是<?php标记。
这篇文章已经有一个答案表明这个解决方案 sans 解释。

如果您看到正在呈现的HTML页面的源代码,您可能会更深入地了解该问题。

答案 5 :(得分:0)

我不认为这些文件被正确包含在内。请尝试这样做:

require dirname(__FILE__) . '/settings.php';
require dirname(__FILE__) . '/inc/btc.php'; 
require dirname(__FILE__) . '/inc/app.php';
require dirname(__FILE__) . '/inc/init.php';

答案 6 :(得分:0)

尝试将变量声明为全局变量,方法是在声明中添加全局变量。

答案 7 :(得分:0)

使用PHP设置JavaScript变量很有帮助,但并不总是这样做。例如,PHP无法临时修改外部.js文档。它会改变它们。

您可以使用以下代码。

<script type="text/javascript"> 
var php = <?php echo $phpVar ?>; 
</script>

答案 8 :(得分:0)

我看到您在index.php上使用的函数(get_x_rates)未定义,请将此函数添加到注释中或检查此函数在任何文件中的定义位置?

答案 9 :(得分:0)

这让我烦恼........................

有几个问题:

  1. 文件没有关闭php标签+最好拼出

  2. 您是否设置了数据库?通过添加$ rates =&#34; hello&#34 ;;来测试btc.php中的函数。返还$ rate;在函数顶部的开放函数(){

  3. 下面

    我已经完成了两个和它的工作,只是我没有设置数据库来检查功能。

答案 10 :(得分:0)

两件事。

首先,将所有<?替换为<?php(包括在脚本中)。

然后,您应该使用<?=$some_var?>替换(在脚本中)<?php echo $some_var; ?>

这是我看到的两件事。希望它可以帮助任何提出这个问题的人。

答案 11 :(得分:0)

这样做非常简单。

假设您有一个JS变量url。所以你有类似

的东西
var url = //your url

由于PHP的echo功能,您所要做的就是在脚本标记内运行PHP,并添加类似的内容

echo "url = //your new url"

这将导致您的url变量被编辑。