我在安装了Geth节点的ubuntu服务器X上建立了一个shell脚本,在测试链中插入智能合约数据。此外,我经过使用Shell脚本命令在同一服务器X上建立一个PHP文件insertscript.php。当我从命令提示符调用PHP脚本时,它会成功执行,而且数据被插入到区块链中。可是当我用CURL调用另外一个服务器的PHP脚本或在浏览器中打开它时,我会看到错误:php
Fatal: Unable to attach to remote geth: dial unix ///home/ubuntu/.ethereum/testnet/geth.ipc: connect: permission denied
个人shell脚本以下:web
#!/bin/sh ATTACHPARAMETER="ipc:///home/ubuntu/.ethereum/testnet/geth.ipc" INCIDENTUUID=${1:-"photo-55697b7f4a550511448499999999"} USERUUID=${2:-"null"} TIMESTAMP=$3 STATUS=$4 echo $INCIDENTUUID echo $USERUUID echo $TIMESTAMP echo $STATUS geth attach $ATTACHPARAMETER << EOF var abi = [abi definition]; var address = "addressofContract"; var mycontract = web3.eth.contract(abi).at(address); eth.defaultAddress = eth.accounts[0]; personal.unlockAccount(eth.accounts[0],'test'); mycontract.createIncident('$INCIDENTUUID','$USERUUID',$TIMESTAMP,$STATUS,{from:eth.accounts[0],gas:1400000}); console.log("Inserted"); EOF
这是由于你的Geth二进制文件在一个用户标识下运行,可是WebServer运行在另外一个用户标识下。shell
你必须让geth.ipc
文件能够读写到你的Web服务器上,不管是经过组访问仍是在两个进程(WebServer和Geth)上使用相同的user_id。ubuntu
此外,请注意,不能经过2个计算机之间的IPC(进程间通讯)共享Geth访问,IPC仅在单个计算机内工做,由于它是数据共享的内核级实现。浏览器
若是想系统的学习php开发以太坊的话推荐一个很受欢迎的在线互动教程: php以太坊,主要是介绍使用php进行智能合约开发交互,进行帐号建立、交易、转帐、代币开发以及过滤器和事件等内容。服务器