AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题

问题[php](computer)

Martin Hope
byteflush
Asked: 2024-11-26 09:20:49 +0800 CST

为使用持久连接的 API 编写套接字服务器

  • 5

我被要求创建一个应用程序来管理通常位于 NAT 或防火墙后面的设备,因此无法从外部访问。

幸运的是,该设备的创建者想到了这一点,所以他们创建了一个 API,可以连接到外部服务器并保持连接有效,同时还可以通过同一连接接收请求 - 如果我理解手册的话。 有问题的设备是 Videosec 人脸识别设备,协议称为“LAPI”(v1 或 v2),我能找到的有关该协议的所有信息都在这里:http ://videosec.com/support/Firmware/oet/OET-213H_API-JSON.pdf

不幸的是,它不起作用。我一打开设备就收到了心跳请求,但我不知道它是否确认了我的 HTTP 200 响应,而且我发送的任何请求都没有得到满足——只是被设备忽略,并不断发送心跳。

我的问题是 - 我这样做对吗?我是否足够了解 HTTP 保持活动(持久)连接?这是我的服务器套接字代码。它是用 PHP 编写的,但我也尝试过 Python:

<?php
header_remove();
$host = "(public ip)";
$port = 5196;
set_time_limit(0);

if (!extension_loaded('sockets')) {
    die('The sockets extension is not loaded.');
}

$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");

function getLocalTime()
{
        $dt = new DateTime("now", new DateTimeZone('Europe/Belgrade'));
        return $dt->format('Y-m-d H:i:s');
}

function returnok($spawn, $url = "/LAPI/V1.0/PACS/Controller/HeartReportInfo")
{
        $rsobj = [
                "ResponseURL" => $url,
                "Code" => 0,
                "Data" => [
                        "Time" => getLocalTime()
                ]
        ];
        $resobj = json_encode($rsobj, JSON_UNESCAPED_SLASHES) . PHP_EOL;
        $response = "HTTP/1.1 200 Ok" . PHP_EOL;
        $response.= "Content-Length: " . strlen($resobj) . PHP_EOL;
        $response.= "Content-Type: application/json" . PHP_EOL;
        $response.= "Connection: keep-alive" . PHP_EOL;
        $response.= "X-Frame-Options: SAMEORIGIN" . PHP_EOL;
        $response.= $resobj . PHP_EOL;
        echo $response;
        if (!socket_write($spawn, $response, strlen($response))) {
                echo "Could not write output\n";
        }
}

function writeback($spawn, $url, $method = "GET")
{
        $output = $method . " " . $url . " HTTP/1.1" . PHP_EOL;
        $output.= "Content-Type: application/json" . PHP_EOL;
        $output.= "Connection: keep-alive" . PHP_EOL;
        $output.= PHP_EOL;
        echo $output;
        if (!socket_write($spawn, $output, strlen($output))) {
                echo "Could not write output\n";
        }
}

$spa = true;
while ($spa) {
        $spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
        if ($input = socket_read($spawn, 16 * 1048576)) {
                $input = trim($input);
                if ($spawn) {
                        returnok($spawn);
                        sleep(7);
                        writeback($spawn, "/LAPI/V1.0/PeopleLibraries/BasicInfo");
                } else {
                        $spa = false;
                }
        }
    socket_close($spawn);
}

socket_close($socket);
?>

交换的内容如下:

RECV: POST /LAPI/V1.0/PACS/Controller/HeartReportInfo HTTP/1.1
Host: (redacted):5196
Content-Type: application/json
Content-Length: 180
Connection: keep-alive

{
"RefId": "(redacted)",
"Time": "2011-12-01 00:38:07",
"NextTime": "2011-12-01 00:38:37",
"DeviceCode": "(redacted)",
"DeviceType": 1
}

SEND: HTTP/1.1 200 OK
Content-Length: 108
Content-Type: application/json
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
{"ResponseURL":"/LAPI/V1.0/PACS/Controller/HeartReportInfo","Code":0,"Data":{"Time":"2024-11-26 02:09:06"}}

SEND: GET /LAPI/V1.0/PeopleLibraries/BasicInfo HTTP/1.1
Content-Type: application/json
Connection: keep-alive

RECV: POST /LAPI/V1.0/PACS/Controller/HeartReportInfo HTTP/1.1
Host: (redacted):5196
Content-Type: application/json
Content-Length: 180
Connection: keep-alive

{
"RefId": "(redacted)",
"Time": "2011-12-01 00:38:16",
"NextTime": "2011-12-01 00:38:46",
"DeviceCode": "(redacted)",
"DeviceType": 1
}

SEND: HTTP/1.1 200 OK
Content-Length: 108
Content-Type: application/json
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
{"ResponseURL":"/LAPI/V1.0/PACS/Controller/HeartReportInfo","Code":0,"Data":{"Time":"2024-11-26 02:09:15"}}
php
  • 1 个回答
  • 26 Views
Martin Hope
Loïc
Asked: 2024-06-13 03:24:10 +0800 CST

Ngnix 使用 php-fpm 处理另一个请求时返回 504

  • 5

下面是给我带来很大麻烦的页面的简化版本:

<?php
passthru('dd if=/path/to/file bs=xx skip=xx count=xx | resource_intensive_command | dd bs=xx skip=xx count=xx');
?>

它仅当客户端停止监听或完成时才停止(但这不是一个快速的任务)。它使用一个 100% 的线程(+ 在其他线程上运行 dd)。

在处理此请求时,任何其他请求(需要 php-fpm)都会导致 504 网关超时错误,我想知道我是否可以对此采取任何措施。我在 Debian(在 Raspberry Pi 上)上运行 php8.2-fpm 和 nginx 1.22.1。
我猜这与某些配置有关,但我完全迷路了。

我不知道这是否会是一个问题,但所有请求都会加载main.php,然后调用正确的文件。

php
  • 1 个回答
  • 17 Views
Martin Hope
Stackerito
Asked: 2023-12-20 15:10:34 +0800 CST

我可以在不停止和启动 IIS 的情况下重新加载 php.ini 吗?

  • 6

我有几个使用 IIS 10 运行的网站使用相同的php.ini,现在我更改了php.ini文件中的一个值,该值无法通过 PHP 中的方法设置ini_set()。

有没有办法php.ini在不停止和启动整个服务器的情况下重新加载其中一个网站?重新启动网站本身不起作用。

我不想停止现在可能正在使用其他网站的用户的操作

php
  • 1 个回答
  • 26 Views
Martin Hope
Stackerito
Asked: 2023-05-22 20:51:41 +0800 CST

如何禁用未列出的文件扩展名但使 PHP 应用程序正常工作?

  • 6

建议我在 IIS 的请求过滤中取消选中“允许未列出的文件扩展名”选项。但现在 PHP 应用程序无法运行,我得到:

HTTP 错误 404.7 - 未找到

请求过滤模块用于拒绝文件扩展名。

我不确定这是否是由于.php文件扩展名或运行应用程序的 php-cgi.exe 模块引起的。

无论哪种情况 - 我需要做什么才能使 PHP 工作(使用 php-cgi)并且也无法“允许未列出的文件扩展名”?

我认为这与“文件扩展名”和“允许文件扩展名”有关,但不确定如何执行此操作,因为我尝试添加.php但仍然不起作用

编辑:出于测试目的,我还添加了exe但仍然错误 404.7

编辑 2:添加了网站中可能使用的任何文件类型:css,js并且仍然是 404.7

编辑3 :我只是检查在没有请求过滤的情况下尝试加载的页面上加载的所有文件,添加了正在加载的所有png可能的扩展名: ,,,等等,但仍然是404.7jpgttfsvg

更新:即使将.php扩展名添加到 Mime Types as后application/x-httpd-php,它仍然不起作用

现在我有以下块web.config:

                <fileExtensions allowUnlisted="false">
                    <add fileExtension=".html" allowed="true" />
                    <add fileExtension=".ico" allowed="true" />
                    <add fileExtension=".htm" allowed="true" />
                    <add fileExtension="." allowed="true" />
                </fileExtensions>
php
  • 1 个回答
  • 161 Views
Martin Hope
Lalarukh khan
Asked: 2022-11-02 23:59:05 +0800 CST

从 POSTMAN API 获取数组,将值拆分为变量并将请求发送到服务器

  • 5

我在我的邮递员 API 中通过 POST 方法获取一个数组,在获取后我试图拆分数组,然后将每个数组值分配给一个变量,将其存储在 XML 代码中并将该 XML 代码发送到服务器。我知道我的代码在数组拆分中写错了。这是我的 POSTMAN API: 响应中的服务器错误

我知道这个错误正在发生,因为由于代码中的数组语法,请求无法处理到服务器,这是我的代码:

<?php
public function price(Request $request)
{
  $information = $this->validate($request, [
    'prices' => 'required'
  ]);

  $prices = $information['prices'];             //Getting the array from postman api
  list($array1, $array2, $array3, $array4, $array5) = array_chunk($prices, 1);   //assigning variables

  $xml = "<?xml version='1.0' encoding='UTF-8'?>
  <methodCall>
  <methodName>update_plan_prices</methodName>
  <params>
    <param>
      <value>
        <struct>
            <value>
              <array>
                <data>
                  <value>
                    <int>" . $array1 . "</int>
                  </value>
                  <value>
                    <int>" . $array2 . "</int>
                  </value>
                  <value>
                    <int>" . $array3 . "</int>
                  </value>
                  <value>
                    <int>" . $array4 . "</int>
                  </value>
                  <value>
                    <int>" . $array5 . "</int>
                  </value>
                </data>
              </array>
            </value>
        </struct>
      </value>
    </param>
  </params>
</methodCall>
";

$url = "https://my_server_url/";
$send_context = stream_context_create(array(
    'http' => array(
      'method' => 'POST',
      'header' => 'Content-Type: application/xml',
      'content' => $xml
    )
));
$response =  file_get_contents($url, false, $send_context);
return response()->json($response);
}
?>
php
  • 1 个回答
  • 17 Views
Martin Hope
WGroleau
Asked: 2022-05-07 17:05:27 +0800 CST

任何平台都会有缺少 PHP 结束标签的问题吗?

  • 6

我遇到了一些以预期开头<?php但不包含?>结束它的开源 PHP 文件。

据我所知,它们在带有 PHP 8.0 的 Apache 上运行良好

哪些平台(如果有)会对此有问题?

php syntax
  • 1 个回答
  • 35 Views
Martin Hope
AStudentWithQuestionsandAnswer
Asked: 2022-03-15 04:19:14 +0800 CST

卸载通过 Web 平台安装程序安装的 PHP 8.0

  • 5

我正在尝试在 Windows Server 2022 机器上卸载 PHP 8.0 (x64)。我已经尝试了所有可用的方法,但 WPI 仍然检测到它已安装。

到目前为止我所尝试的:

  • 删除与 PHP 相关的文件夹
  • 通过应用程序和功能卸载 PHP
  • 在某个地方发现您必须从我没有的 IIS Express 文件夹中删除该文件。
  • 进入 applicationHost.config 那里没有 php 的痕迹。
windows php
  • 1 个回答
  • 490 Views
Martin Hope
edelwater
Asked: 2021-09-27 07:27:49 +0800 CST

已安装 PHP 扩展 MySqli 但调用它会出错

  • 5

我运行以下语句(因此它是完全可重现的)(因为我想使用 WordPress 的源代码)并且以下使您当前的目录成为在 8082(pwd)下运行的网站。

mkdir wordpress
cd wordpress
git clone https://github.com/WordPress/WordPress.git .
docker run -p 127.0.0.1:3306:3306 –name some-mariadb -e MARIADB_ROOT_PASSWORD=PASSWORD -d mariadb:latest
docker run -d -p 8082:80 –mount type=bind,source=”$(pwd)”,target=/var/www/html php:apache
  • 在 /usr/local/etc/php/php.ini extension=mysqli 中未注释(并且未注释其他)(所以我编辑了这个文件)
  • 我可以连接到 MariaDb 并制作数据库和东西

我制作了一个新文件:info.php:

if ( function_exists( 'mysqli_connect' ) ) 
{
   echo "exists";
}
else
{
   echo "does not exist";
}
phpinfo();

问题:浏览器中的输出显示“不存在”。

在此处输入图像描述

(phpinfo() phpinfo 显示 lib mysqlnd 8.0.11) 在此处输入图像描述

这意味着 WordPress 给出了相同的错误,因为这是 WordPress 使用的代码。

那么为什么...在 phpinfo 提供详细信息时找不到功能/扩展名。

我做错了很可能。

参考:

  • https://hub.docker.com/_/mariadb官方图片
  • https://hub.docker.com/_/php官方图片
  • https://github.com/WordPress/WordPress.git官方镜像仓库

更新 我注意到“--with-mysqli=mysqlnd”不在上面的 phpinfo 屏幕中。所以我解压了 tar 文件(当然在 docker 镜像中)并

  • 运行 phpinfo 给出的相同配置命令,附加“--with-mysqli=mysqlnd”(但必须在各种 apt-get xxx-dev 库之间安装,包括 apache 开发库、libxml-dev、sqlite3-dev、libssl-开发,zlib1g-dev,libcurl4-openssl-dev,libonig-dev,libreadline-dev,libsodium-dev,libargon2-dev)
  • 跑了
  • 运行 make install
  • 重新开始

这解决了问题。

php docker
  • 1 个回答
  • 512 Views
Martin Hope
Saeed
Asked: 2021-08-22 22:15:09 +0800 CST

POST 请求未重定向到 https

  • 6

这是我example.conf的nginx配置文件:

server {
  listen 80;
  server_name api.example.net;
  return 301 https://api.example.net$request_uri;
  access_log off;
  error_log /dev/stderr;
}

server {
  listen 443 ssl;
  root /var/www/example_api/public;
  server_name api.example.net;
  ssl_certificate /etc/letsencrypt/live/api.example.net/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/api.example.net/privkey.pem;

  location / {
    # try to serve file directly, fallback to index.php
    try_files $uri /index.php$is_args$args;
    add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE, PATCH";
    add_header Access-control-Allow-Headers "Content-Range, Authorization,X-Requested-With, counter, id_token, Keep-Alive, User-Agent, Cache-Control, Content-Type, MyApp-Handle-Errors-Generically";
    add_header Access-Control-Expose-Headers "Content-Range, Authorization, id_token, Keep-Alive, User-Agent, Cache-Control, Content-Type, MyApp-Handle-Errors-Generically";
    add_header Access-Control-Max-Age "31536000";
}

  #location ~ ^/index\.php(/|$) {
  # https://stackoverflow.com/questions/68350978/nginx-serving-only-but-not-any-other-files
  location ~ \.php(/|$) {
    try_files $uri $uri/ /index.php?$query_string;
    fastcgi_pass api:9000;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    fastcgi_param DOCUMENT_ROOT $realpath_root;
    add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE, PATCH";
    add_header Access-control-Allow-Headers "Content-Range, Authorization,X-Requested-With, counter, id_token, Keep-Alive, User-Agent, Cache-Control, Content-Type, MyApp-Handle-Errors-Generically";
    add_header Access-Control-Expose-Headers "Content-Range, Authorization, id_token, Keep-Alive, User-Agent, Cache-Control, Content-Type, MyApp-Handle-Errors-Generically";
    add_header Access-Control-Max-Age "31536000";
  }

  location ~ \.php$ {
    return 404;
  }

  access_log off;
  error_log /dev/stderr;
}

问题是当我从in发送POST请求时,我收到此错误:POSTMANhttp

api.example.net/api/user/register/checkuser?phone=0123456789

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <meta name="robots" content="noindex,nofollow,noarchive" />
    <title>An Error Occurred: Method Not Allowed</title>
...

但是,如果将 URL 更改为https,则没有问题:

https://api.example.net/api/user/register/checkuser?phone=0123456789

{"data":{"status":1},"meta":[]}

我做错什么了吗?

我应该提到我们从旧服务器迁移Caddy web server到当前服务器nginx,并且两者都是 Dockerized (仅额外信息)。

nginx php
  • 1 个回答
  • 53 Views
Martin Hope
kukri
Asked: 2021-06-08 10:39:00 +0800 CST

我的 .php 文件没有在 WAMP 服务器上运行,它正在尝试保存文件

  • 5

我刚刚克隆了一个项目,所以当我加载它时它工作得很好,例如:“localhost/example/contact.html”,但是当我点击到端点是“localhost/example/index.php”的主页时,它会问我像这样保存文件:https ://i.stack.imgur.com/afq10.png

我检查了 php.ini、httpd.conf 等文件中的所有内容,但仍然找不到解决方案,我还重新安装了 wamp 2 次。

php错误日志也给了我这个错误:文件C:/WINDOWS/system32/drivers/etc/hosts不存在

任何帮助,将不胜感激!

apache-http-server php
  • 1 个回答
  • 613 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve