我在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";
感谢您的帮助!!
答案 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)
这让我烦恼........................
有几个问题:
文件没有关闭php标签+最好拼出
您是否设置了数据库?通过添加$ rates =&#34; hello&#34 ;;来测试btc.php中的函数。返还$ rate;在函数顶部的开放函数(){
我已经完成了两个和它的工作,只是我没有设置数据库来检查功能。
答案 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变量被编辑。