2013-02-12 105 views
2

我知道我已经有一个类似的帖子,但我不能为我的生活制定出两个片段之间有什么不同 - 因为我只能得到返回值从第一个例子 - 但不是第二个例子,这两个例子中的方法都返回一个值。更奇怪的(或令人沮丧的是)PHP不会在第二个例子中抛出任何错误,它只是呈现一个空白屏幕。我在XAMMP上运行,我认为“显示错误”等被设置为true。不知道为什么该方法没有返回任何值

第一个例子(完美的作品):

<html> 
    <?php 
     function myMethod() { 
      return "testing"; 
     } 
    ?> 

    <script type="text/javascript"> 
     var val= "<?php echo myMethod(); ?>"; 
     document.write(val); 
    </script> 

</html> 

第二个例子:(注意:只有 'myMethod的' 功能已经改变)

<html> 
    <?php 
     function myMethod() { 
      error_reporting(E_ALL); 

      echo "<h2>Querying...</h2>\n"; 

      /* Get the port for the WWW service. */ 
      $service_port = getservbyname('www', 'tcp'); 

      /* Get the IP address for the target host. */ 
      $address = gethostbyname('www.example.com'); 

      /* Create a TCP/IP socket. */ 
      $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
      if ($socket === false) { 
       echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; 
      } else { 
       echo "OK.\n"; 
      } 

      echo "Attempting to connect to '$address' on port '$service_port'..."; 
      $result = socket_connect($socket, $address, $service_port); 
      if ($result === false) { 
       echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; 
      } else { 
       echo "OK.\n"; 
      } 

      $in = "HEAD/HTTP/1.1\r\n"; 
      $in .= "Host: www.example.com\r\n"; 
      $in .= "Connection: Close\r\n\r\n"; 
      $out = ''; 

      echo "Sending HTTP HEAD request..."; 
      socket_write($socket, $in, strlen($in)); 
      echo "OK.\n"; 

      echo "Reading response:\n\n"; 
      while ($out = socket_read($socket, 2048)) { 
       echo $out; 
       return 'test'; 
      } 

      echo "Closing socket..."; 
      socket_close($socket); 
      echo "OK.\n\n"; 
     } 
    ?> 

    <script type="text/javascript"> 
     var val= "<?php echo myMethod(); ?>"; 
     document.write(val); 
    </script> 
</html> 

更新:继什么@the系统说,这看起来像变量包含正确的数据,但“文件撰写”似乎并不管出来的浏览器视图正确:

<html> 
<script type="text/javascript"> 
    var val= "<h2>Querying...</h2> 
    OK. 
    Attempting to connect to '192.0.43.10' on port '80'...OK. 
    Sending HTTP HEAD request...OK. 
    Reading response: 

    HTTP/1.0 302 Found 
    Location: http://www.iana.org/domains/example/ 
    Server: BigIP 
    Connection: close 
    Content-Length: 0 

    test"; 

    document.write(val); 
</script> 
</html> 
+0

打开您的开发人员控制台以阅读错误。显示呈现的JavaScript代替PHP。 – 2013-02-12 15:13:46

+1

一个主要缺陷是,你会被那些'echo'语句倾倒到您的JS变量赋值之前,返回值被回波输出。任何'“'在那里会引起JS语法错误。** ** NEVER直接输出PHP数据转换成一个JS代码上下文而不使其通过json_encode()首先。 – 2013-02-12 15:14:29

回答

3

查看浏览器的源代码视图。该脚本似乎可能希望(见下文)的工作。

但请注意,在JavaScript 是不可能建立多行字符串这样

在构建一个多行字符串在JavaScript中你必须这样做:

var str = "first line\n"; 
    str += "secon line\n"; 

或使用join函数:

var str = [ 
    "first line", 
    "second line" 
].join("\n"); 

这里说到你的输出:

<html> 

<script type="text/javascript"> 
var val= "<h2>Querying...</h2> 
OK. 
Attempting to connect to '192.0.43.10' on port '80'...OK. 
Sending HTTP HEAD request...OK. 
Reading response: 

HTTP/1.0 302 Found 
Location: http://www.iana.org/domains/example/ 
Server: BigIP 
Connection: close 
Content-Length: 0 

test"; 

document.write(val); 
</script> 

</html> 
+0

@ hek2mgl你能提供一个例子然后处理这种多数据? – Mike 2013-02-12 15:18:27

+0

@Mike done !. :) – hek2mgl 2013-02-12 15:20:10

1

更改所有的回声在一个变量本地存储:

function myMethod() 
{ 
error_reporting(E_ALL); 

$temp = "<h2>Querying...</h2>\n"; 

/* Get the port for the WWW service. */ 
$service_port = getservbyname('www', 'tcp'); 

/* Get the IP address for the target host. */ 
$address = gethostbyname('www.example.com'); 

/* Create a TCP/IP socket. */ 
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
if ($socket === false) { 
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; 
} else { 
    echo "OK.\n"; 
} 

$temp .= "Attempting to connect to '$address' on port '$service_port'..."; 
$result = socket_connect($socket, $address, $service_port); 
if ($result === false) { 
    $temp .= "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; 
} else { 
    $temp .= "OK.\n"; 
} 

$in = "HEAD/HTTP/1.1\r\n"; 
$in .= "Host: www.example.com\r\n"; 
$in .= "Connection: Close\r\n\r\n"; 
$out = ''; 

$temp .= "Sending HTTP HEAD request..."; 
socket_write($socket, $in, strlen($in)); 
$temp .="OK.\n"; 

$temp .="Reading response:\n\n"; 
while ($out = socket_read($socket, 2048)) { 
    $temp .= $out; 
    return 'test'; 

} 

$temp .= "Closing socket..."; 
socket_close($socket); 
$temp .= "OK.\n\n"; 
return $temp; 
} 
+0

另一件事是如果要将文档写入文档,请将\ n更改为
。 – Zach 2013-02-12 15:19:51

1

,因为JavaScript无法支持多行文本你可以返回输出作为阵列json_encode在JavaScript中使用它作为数组:

<?php 

    function myMethod() 
    { 
     error_reporting(E_ALL); 
     $return = array(); 

     $return[] = "<h2>Querying...</h2>\n"; 

     /* Get the port for the WWW service. */ 
     $service_port = getservbyname('www', 'tcp'); 

     /* Get the IP address for the target host. */ 
     $address = gethostbyname('www.example.com'); 

     /* Create a TCP/IP socket. */ 
     $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
     if ($socket === false) { 
      $return[] = "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; 
     } else { 
      $return[] = "OK.\n"; 
     } 

     $return[] = "Attempting to connect to '$address' on port '$service_port'..."; 
     $result = socket_connect($socket, $address, $service_port); 
     if ($result === false) { 
      $return[] = "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; 
     } else { 
      $return[] = "OK.\n"; 
     } 

     $in = "HEAD/HTTP/1.1\r\n"; 
     $in .= "Host: www.example.com\r\n"; 
     $in .= "Connection: Close\r\n\r\n"; 
     $out = ''; 

     $return[] = "Sending HTTP HEAD request..."; 
     socket_write($socket, $in, strlen($in)); 
     $return[] = "OK.\n"; 

     $return[] = "Reading response:\n\n"; 
     while ($out = socket_read($socket, 2048)) { 
      $return[] = $out; 
     } 

     $return[] = "Closing socket..."; 
     socket_close($socket); 
     $return[] = "OK.\n\n"; 

     return json_encode($return); 
    } 

?> 

<script type="text/javascript"> 
var val= <?php echo myMethod(); ?>; 

for(i in val){ 
    document.write(val[i] + '<br \/>'); 
} 
</script> 
0

我编辑你的代码的问题是HTML和JS代码不能在PHP

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
</head> 

<body> 
<?php 

function myMethod() 
{ 
error_reporting(E_ALL); 

echo "<h2>Querying...</h2>\n"; 

/* Get the port for the WWW service. */ 
$service_port = getservbyname('www', 'tcp'); 

/* Get the IP address for the target host. */ 
$address = gethostbyname('www.example.com'); 

/* Create a TCP/IP socket. */ 
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
if ($socket === false) { 
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; 
} else { 
    echo "OK.\n"; 
} 

echo "Attempting to connect to '$address' on port '$service_port'..."; 
$result = socket_connect($socket, $address, $service_port); 
if ($result === false) { 
    echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; 
} else { 
    echo "OK.\n"; 
} 

$in = "HEAD/HTTP/1.1\r\n"; 
$in .= "Host: www.example.com\r\n"; 
$in .= "Connection: Close\r\n\r\n"; 
$out = ''; 

echo "Sending HTTP HEAD request..."; 
socket_write($socket, $in, strlen($in)); 
echo "OK.\n"; 

echo "Reading response:\n\n"; 
while ($out = socket_read($socket, 2048)) { 
    echo $out; 
    return 'test'; 

} 

echo "Closing socket..."; 
socket_close($socket); 
echo "OK.\n\n"; 
} 

?> 
<?php echo myMethod(); ?> 
</body> 
</html> 
相关问题