小编Ale*_*din的帖子

如何针对外部进程锁定文件

我需要创建一个无法被其他脚本或进程删除的锁定文件.我试过这个:

    $f = fopen($pidFile, 'w');
    fwrite($f, getmypid());
    flock($f, LOCK_EX);
Run Code Online (Sandbox Code Playgroud)

但是,从当前用户启动的任何其他进程都可以删除该$f文件,即使正在运行的脚本仍然打开了文件句柄.如何解决这个问题并防止其他人(即非PHP进程)删除文件?当进程退出时,锁会自动释放吗?所有类似的问题都以RTM flock()结束,但它们都没有回答如何针对外部进程锁定文件.

操作系统是 Linux 2.6.32-431.el6.x86_64

php file-locking

7
推荐指数
1
解决办法
401
查看次数

没有 Scaffold,Material App 样式将无法工作

我正在尝试创建一个没有 Scaffold 元素的 Material design 应用程序:这是纯粹的默认应用程序:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget …
Run Code Online (Sandbox Code Playgroud)

flutter

6
推荐指数
1
解决办法
1563
查看次数

如何在开发 Chrome 运行期间将浏览器数据(cookie、本地存储)保留在 Flutter Web 中?

在 Flutter Web 中,当我从 IDE 在 Chrome 中运行调试会话时,所有数据(cookie、本地存储等)都会在下次运行时被清除。例如,如果我登录我的网站,我会在下次运行时注销。

如何在运行之间保留浏览器数据?

PS:我读过类似的问题:Flutter Web本地存储,但其作者对为什么不保留数据的解释感到满意。我想保留数据并对实现这一目标的方法感到好奇。在 Android 设备上(甚至在模拟器上),数据会被保留。我想在浏览器中实现同样的效果。

flutter-web

6
推荐指数
1
解决办法
3026
查看次数

PayPal沙箱IPN验证始终返回INVALID

我搜索了这个问题并尝试了所有建议,但没有任何效果.

我尝试了这段代码:https://developer.paypal.com/docs/classic/ipn/ht_ipn/但它不起作用.只需复制粘贴它并删除旧的magick_quotes路径.

我试过这个代码:http://samples.geekality.net/view-source.php?file = ipn/ipn_handler.class.php,它也不起作用.

在所有情况下,我都尝试做以下事情:

$req = 'cmd=_notify-validate&' . file_get_contents('php://input');
Run Code Online (Sandbox Code Playgroud)

为了确保我向IPN 发送了它发送给我的确切内容.另外我使用了调试代理(Fiddler)并保存了IPN发送给我的内容以及我发送给IPN的内容.请求主体是字节到字节相同的,除了我的请求以cmd=_notify-validate&字符串为前缀.

是的,我检查过我使用了正确的沙盒网址.以下是整个请求主体:

IPN发给我的是什么:(我刚刚将个人数据替换为XXX)

POST http://localhost.loc/en/payment/success/1 HTTP/1.1
Host: localhost.loc
Connection: keep-alive
Content-Length: 921
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4

mc_gross=1.00&protection_eligibility=Ineligible&payer_id=5XNKM66NSDKC4&tax=0.00&payment_date=05%3A34%3A11+Jun+01%2C+2015+PDT&payment_status=Completed&charset=utf-8&first_name=XXX&mc_fee=0.33&notify_version=3.8&custom=topup%3A262262%3A1%3A1433162020&payer_status=verified&business=XXX&quantity=1&payer_email=XXX&verify_sign=AG58dBsn5g2z8O8NEjotbuJGP14PAIpZ4k26VL8IyhaDPkcDRj002Keq&memo=hmgvjgjhgfjhfggjhfjtfgjh&txn_id=4CN141026K278934Y&payment_type=instant&last_name=XXX&receiver_email=XXX&payment_fee=0.33&receiver_id=DCMXPXGX4QX6J&txn_type=web_accept&item_name=Account+top+up&mc_currency=USD&item_number=Account+262262+top+up&residence_country=US&test_ipn=1&handling_amount=0.00&transaction_subject=topup%3A262262%3A1%3A1433162020&payment_gross=1.00&shipping=0.00&auth=ANSTBwT3znll-gJQZO2cLoV5QJFW9v8W.FqyWxffdtI0L-9mfsoe2xRL44M86Sn2XtYGtcqG4Fjjel1kdYZyxpQ
Run Code Online (Sandbox Code Playgroud)

我发送给IPN的内容:

POST https://www.sandbox.paypal.com/cgi-bin/webscr HTTP/1.1
Host: www.sandbox.paypal.com
Accept: */*
Content-Length: 942
Content-Type: application/x-www-form-urlencoded

cmd=_notify-validate&mc_gross=1.00&protection_eligibility=Ineligible&payer_id=5XNKM66NSDKC4&tax=0.00&payment_date=05%3A34%3A11+Jun+01%2C+2015+PDT&payment_status=Completed&charset=utf-8&first_name=XXX&mc_fee=0.33&notify_version=3.8&custom=topup%3A262262%3A1%3A1433162020&payer_status=verified&business=XXX&quantity=1&payer_email=XXX&verify_sign=AG58dBsn5g2z8O8NEjotbuJGP14PAIpZ4k26VL8IyhaDPkcDRj002Keq&memo=hmgvjgjhgfjhfggjhfjtfgjh&txn_id=4CN141026K278934Y&payment_type=instant&last_name=XXX&receiver_email=XXX&payment_fee=0.33&receiver_id=DCMXPXGX4QX6J&txn_type=web_accept&item_name=Account+top+up&mc_currency=USD&item_number=Account+262262+top+up&residence_country=US&test_ipn=1&handling_amount=0.00&transaction_subject=topup%3A262262%3A1%3A1433162020&payment_gross=1.00&shipping=0.00&auth=ANSTBwT3znll-gJQZO2cLoV5QJFW9v8W.FqyWxffdtI0L-9mfsoe2xRL44M86Sn2XtYGtcqG4Fjjel1kdYZyxpQ
Run Code Online (Sandbox Code Playgroud)

谁能帮助我,我做错了什么?谢谢.

php paypal-ipn

5
推荐指数
1
解决办法
1746
查看次数

如何使用以前使用mcrypt加密的OpenSSL解密字符串?

由于mcrypt在PHP 7.1中已弃用,并且我在现有项目中使用mcrypt加密/解密了很多数据,因此如何将我的PHP代码从mcrypt迁移到OpenSSL?我有以下代码要加密:

$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, 'salt', 'source string', MCRYPT_MODE_ECB));
Run Code Online (Sandbox Code Playgroud)

解密代码为:

$source = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, 'salt', base64_decode('encoded string'), MCRYPT_MODE_ECB);
Run Code Online (Sandbox Code Playgroud)

openssl_在不进行编码数据转换的情况下,以上示例中应使用哪些函数来获得相同的结果?

还是唯一的方法是运行一个脚本,该脚本将使用mcrypt解密所有存储的加密数据并使用openssl进行编码?

谢谢

php mcrypt php-openssl

5
推荐指数
1
解决办法
1721
查看次数

无法在 Android Studio 中的现有 Flutter 项目中打开不可为空的功能

我在 Android Studio 4.0 的 Flutter 中有一个现有项目。我正在尝试将其迁移到默认情况下启用不可为空功能的开发频道。我做了什么:

  1. 更新了 pubspec.yaml 中的 SDK 要求:
environment:
  sdk: ">=2.9.0-14.0.dev <3.0.0"
Run Code Online (Sandbox Code Playgroud)
  1. 运行 pub get 和 pub upgrade:
> flutter --version
Flutter 1.20.0-3.0.pre • channel dev • https://github.com/flutter/flutter.git
Framework • revision 0af027f805 (30 hours ago) • 2020-07-04 12:19:20 -0700
Engine • revision a751393804
Tools • Dart 2.9.0 (build 2.9.0-20.0.dev 22da8934ac)
Run Code Online (Sandbox Code Playgroud)
  1. 创建了analysis_options.yaml包含以下内容的文件:
analyzer:
  enable-experiment:
    - non-nullable
Run Code Online (Sandbox Code Playgroud)
  1. 我运行这个命令:
> dart --enable-experiment=non-nullable
Usage: dart [<vm-flags>] <dart-script-file> [<script-arguments>]

Executes the Dart script <dart-script-file> with the given list of …
Run Code Online (Sandbox Code Playgroud)

dart android-studio flutter

5
推荐指数
1
解决办法
1554
查看次数

Nginx auth_request_set 指令不起作用

我有一个示例配置:

    upstream content {
      server 127.0.0.1:4001;
    }

    server {
        listen 4000;

        location /test-auth {
            add_header X-Test "test value";
            return 200;
        }

        location /proxy {
            add_header "X-Test1" "test1";
            auth_request /test-auth;
            auth_request_set $test $upstream_http_x_test;
            auth_request_set $test2 $upstream_status;
            proxy_pass http://content?test=$test&test2=$test2;
            proxy_pass_request_body off;
            add_header X-Test $test;
            add_header X-Test2 $test2;
        }
    }

    server {
        listen 4001;
        add_header X-Test3 "test3";
        return 200 "test response $args";
    }
Run Code Online (Sandbox Code Playgroud)

我想X-Test在请求时将标头从身份验证位置传递到浏览器/proxyauth_request_set这应该由指令通过拉动变量值来完成$upstream_http_x_test。但当在 auth 端点输出中设置标头时,它始终为空。直接访问时/test-auth,它出现在输出中。但我无法在该/proxy位置获取它。此外,$upstream_status应该始终存在显示身份验证请求状态,但它也是空的。当我向 发出请求时/proxy,我只得到这些: …

nginx

5
推荐指数
1
解决办法
579
查看次数

如何在 GItLab CI/CD YAML 值中使用以下空格转义冒号?

我在 GitLab CI/CD 中有以下行:

  script:
    - echo "Backend image: $BACKEND_IMAGE"
Run Code Online (Sandbox Code Playgroud)

但 YAML 解释器将其视为对象。然后我用谷歌搜索了这个问题并尝试了这个:

  script:
    - echo "Backend image:: $BACKEND_IMAGE"
Run Code Online (Sandbox Code Playgroud)

但它仍然不起作用,GitLab 作业失败,并显示以下内容:

jobs:deploy review:script config 应该是一个字符串或最多 10 层深度的嵌套字符串数组

如果我完全删除冒号,它就可以正常工作。如何在 GitLab CI/CD 中创建带有冒号和后面空格的字符串值?

yaml gitlab-ci

4
推荐指数
1
解决办法
3882
查看次数

getopt 在具有短选项的 MacOS 下无法按预期工作

我有以下命令:command.sh bar -b=FOO

我试图用以下内容来解析它:getopt "m::b::" "$@"

在Linux下,结果是:-b =FOO -- command.sh bar

在 MacOS 下,结果是:-- command.sh bar -b=FOO。所以根本没有解析它。我尝试过-bFOO-b FOO但结果相同,它没有被解析。

如何解决这个问题?我需要一个可以在 Mac 和 Linux 上运行的跨平台 bash 解决方案。

macos bash getopt

2
推荐指数
1
解决办法
830
查看次数