从Web服务器与插件通信

时间:2016-03-05 作者:Phenom588

是否可以与外部来源的插件进行通信?

我有一个运行wordpress的apache web服务器,我希望通过脚本自动输入触发插件中的操作。

起初我想我可能只是能够制作一个插件,它监听套接字的输入,并使用挂钩从其他插件调用正确的函数。这只会导致网站无法完全加载。

有可能吗?我是不是错过了什么?

编辑:如果有人需要澄清,请告诉我,我会尽最大努力以不同的方式解释。我意识到,可能不清楚外部输入来自哪里。它将与网站上发生的事情完全分离,更像是在服务器上本地运行的bash脚本。

Edit2:我的问题可能是Setting up an API "listening" page, 但我并不局限于一篇HTTP文章。

Edit3:我还意识到我使用的插件可能会有所帮助:(plugin.php)

$address = \'localhost\';
$port = 8888;

if(( $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false ) {
  error_log("socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\\n");
}


if(socket_bind($sock, $address, $port) === false ){
  error_log("socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\\n");
}

if(socket_listen($sock, 5) === false){
  error_log("socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\\n");
}  

socket_set_nonblock($sock);

do{
  if(($msgsock = socket_accept($sock)) === false ){
    error_log("socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\\n");
  }
  else{
    do{
      if( false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))){
        error_log("socket_read() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\\n");
      }
      //Do things with buf
      socket_close($msg_socket);
    } while(true);
  }
  break;
} while(true);

socket_close($sock);
现在除了等待连接并读取2048字节外,它什么都不做,但当它转到socket\\u accept时,它会收到一个错误“Success”。

2 个回复
SO网友:Chris Andreikos

如果您需要独立于任何访问者操作进行操作,那么请考虑WP_Cron.

按照上述方式,您可以:

创建一个调用服务器外部内容的函数。例如:使用“curl”或REST或任何东西

add_action( \'my_task_hook\', \'my_task_function\' );
将WordPress cron设置为:

if ( ! wp_next_scheduled( \'my_task_hook\' ) ) {  
    wp_schedule_event( time(), \'hourly\', \'my_task_hook\' );
}
为了确保上述解决方案不考虑任何访客活动。这是一种基于WordPress Cron作业的自动方式的服务器(您的)到服务器(第三方)通信。

SO网友:Mark Kaplun

apache上的php代码以及wordpress代码仅作为对http请求的响应执行,因此您不能以您尝试的方式“等待事件”。您必须通过http触发所需的操作,例如,一个特制的URL,或者从CLI加载wordpress,并在其引导后执行代码。您可以查看wordpress CLI实用程序的代码https://github.com/wp-cli/wp-cli 了解如何进行ir。