佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 972|回复: 9

php socket 疑问. fatal error

[复制链接]
发表于 29-3-2009 04:03 PM | 显示全部楼层 |阅读模式
尝试利用php 建立一个port socket.

code 是这样的:
  1. #!/usr/bin/php -q
  2. /*
  3. Raymond Fain
  4. Used for PHP5 Sockets with Flash 8 Tutorial for Kirupa.com
  5. For any questions or concerns, email me at ray@obi-graphics.com
  6. or simply visit the site, www.php.net, to see if you can find an answer.
  7. */


  8. error_reporting(E_ALL);

  9. set_time_limit(0);

  10. ob_implicit_flush();

  11. $address = '192.168.0.16';
  12. $port = 9999;

  13. //---- Function to Send out Messages to Everyone Connected ----------------------------------------

  14. function send_Message($allclient, $socket, $buf) {

  15. foreach($allclient as $client) {

  16. socket_write($client, "$socket wrote: $buf");

  17. }

  18. }



  19. //---- Start Socket creation for PHP 5 Socket Server -------------------------------------

  20. if (($master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {

  21. echo "socket_create() failed, reason: " . socket_strerror($master) . "\n";

  22. }

  23. socket_set_option($master, SOL_SOCKET,SO_REUSEADDR, 1);


  24. if (($ret = socket_bind($master, $address, $port)) < 0) {

  25. echo "socket_bind() failed, reason: " . socket_strerror($ret) . "\n";

  26. }


  27. if (($ret = socket_listen($master, 5)) < 0) {

  28. echo "socket_listen() failed, reason: " . socket_strerror($ret) . "\n";

  29. }



  30. $read_sockets = array($master);

  31. //---- Create Persistent Loop to continuously handle incoming socket messages ---------------------
  32. while (true) {

  33. $changed_sockets = $read_sockets;

  34. $num_changed_sockets = socket_select($changed_sockets, $write = NULL, $except = NULL, NULL);

  35. foreach($changed_sockets as $socket) {


  36. if ($socket == $master) {


  37. if (($client = socket_accept($master)) < 0) {

  38. echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
  39. continue;

  40. } else {

  41. array_push($read_sockets, $client);

  42. }

  43. } else {


  44. $bytes = socket_recv($socket, $buffer, 2048, 0);

  45. if ($bytes == 0) {

  46. $index = array_search($socket, $read_sockets);
  47. unset($read_sockets[$index]);
  48. socket_close($socket);

  49. }else{

  50. $allclients = $read_sockets;
  51. array_shift($allclients);
  52. send_Message($allclients, $socket, $buffer);

  53. }

  54. }


  55. }

  56. }

  57. ?>
复制代码


然后在localhost 开启这个file 时, 显示:
fatal error Call to undefined function socket_create() in C:\web\apache2\htdocs\server.php line 32

line 32 是 if (($master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
也try 了很多 其他类似的create socket script., 也是一样的结果.

google 找到的方案试了都是解决不了.

例如php.ini
  1. ;extension=php_snmp.dll
  2. extension=php_sockets.dll
  3. ;extension=php_sybase_ct.dll
复制代码


我用window install apache2,

各位大大有人成功的使用过create socket function 吗?
回复

使用道具 举报


ADVERTISEMENT

发表于 29-3-2009 06:07 PM | 显示全部楼层
你的phpinfo里面有没有这一行:
sockets
Sockets Support         enabled
?
回复

使用道具 举报

 楼主| 发表于 30-3-2009 10:23 AM | 显示全部楼层
ehh 没有..
加在php.ini那里?
回复

使用道具 举报

发表于 30-3-2009 03:10 PM | 显示全部楼层
如果你的php.ini是对的,
你的phpinfo里面会有这个:


既然你改了php.ini,那你看看你有没有改到对的php.ini。
看看你的 Loaded Configuration File是哪个,再去改。
回复

使用道具 举报

发表于 30-3-2009 03:10 PM | 显示全部楼层
如果你的php.ini是对的,
你的phpinfo里面会有这个:


既然你改了php.ini,那你看看你有没有改到对的php.ini。
看看你的 Loaded Configuration File是哪个,再去改。
回复

使用道具 举报

 楼主| 发表于 30-3-2009 04:58 PM | 显示全部楼层
php.ini 在 c:\windows\php.ini
socket support enable or "Socket" 的大字没有显示... 在phpinfo()

是不是只是改 php.ini 就行了??
dll 的文件呢?

谢谢你
回复

使用道具 举报

Follow Us
发表于 30-3-2009 05:04 PM | 显示全部楼层
确定你改的php.ini是windows的那个,还有php.ini里面的extension_dir指去真确的dll的folder,就应该没问题了。改好记得restart Apache.
回复

使用道具 举报

发表于 31-3-2009 03:35 PM | 显示全部楼层
記得順便檢查一下你的php.ini裡面的extension_dir有沒有設好.
那是告訴你的系統說你的那些extension放在那裡的.
請按照你主機的環境去修改設定

  1. ; Directory in which the loadable extensions (modules) reside.
  2. extension_dir = "c:\php5\ext"
复制代码
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 31-3-2009 09:31 PM | 显示全部楼层
原帖由 seikan 于 30-3-2009 05:04 PM 发表
确定你改的php.ini是windows的那个,还有php.ini里面的extension_dir指去真确的dll的folder,就应该没问题了。改好记得restart Apache.


我还不知道php.ini要改什么 哦??
回复

使用道具 举报

发表于 2-4-2009 02:56 AM | 显示全部楼层
原帖由 souki 于 31-3-2009 09:31 PM 发表


我还不知道php.ini要改什么 哦??

修改一下的兩個項目

1) 這是你PHP的modules的資料夾
  1. ; Directory in which the loadable extensions (modules) reside.
  2. extension_dir = "c:\php5\ext"
复制代码


2) 把前面的 ; 去掉
  1. extension=php_sockets.dll
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 14-12-2025 03:44 PM , Processed in 0.121546 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表