Hướng dẫn can you use php on client side? - bạn có thể sử dụng php ở phía máy khách không?

Có thể khởi chạy tập lệnh PHP, phía máy khách, sử dụng trang web HTML không?

Nếu không, có cách nào để nhúng PHP vào HTML để nó có thể chạy phía máy khách không?

Hướng dẫn can you use php on client side? - bạn có thể sử dụng php ở phía máy khách không?

Bhargav Rao

47.9K27 Huy hiệu vàng123 Huy hiệu bạc138 Huy hiệu đồng27 gold badges123 silver badges138 bronze badges

Đã hỏi ngày 8 tháng 3 năm 2013 lúc 3:44Mar 8, 2013 at 3:44

Hướng dẫn can you use php on client side? - bạn có thể sử dụng php ở phía máy khách không?

6

Tôi nghĩ những gì bạn muốn là JavaScript. PHP có nghĩa là cho phía máy chủ và JavaScript dành cho phía máy khách, trong số những thứ khác.

Hướng dẫn can you use php on client side? - bạn có thể sử dụng php ở phía máy khách không?

B001

2.0386 Huy hiệu vàng22 Huy hiệu bạc31 Huy hiệu Đồng6 gold badges22 silver badges31 bronze badges

Đã trả lời ngày 8 tháng 3 năm 2013 lúc 3:45Mar 8, 2013 at 3:45

blaedjblaedjblaedj

3222 Huy hiệu bạc9 Huy hiệu Đồng2 silver badges9 bronze badges

3

Không. PHP không thể được chạy trong trình duyệt. Tìm hiểu JavaScript, thay vào đó là Coffescript nếu bạn không thích cú pháp của JavaScript.

Newbyte

1.9504 huy hiệu vàng22 Huy hiệu bạc42 Huy hiệu đồng4 gold badges22 silver badges42 bronze badges

Đã trả lời ngày 8 tháng 3 năm 2013 lúc 3:47Mar 8, 2013 at 3:47

Hướng dẫn can you use php on client side? - bạn có thể sử dụng php ở phía máy khách không?

Daniil Ryzhkovdaniil RyzhkovDaniil Ryzhkov

7.2252 Huy hiệu vàng40 Huy hiệu bạc58 Huy hiệu đồng2 gold badges40 silver badges58 bronze badges

4

Tôi chắc chắn rằng bạn đã bắt gặp rất nhiều trang web sử dụng JavaScript ở mặt trước, nhưng còn sử dụng PHP làm ngôn ngữ phía máy khách thì sao? Làm thế nào, bạn hỏi? Vì PHP dựa trên C, thực sự có thể biên dịch một phiên bản có thể chạy bên trong trình duyệt web của bạn bằng cách sử dụng lắp ráp web.

Nó là một ý tưởng tốt? Hãy cùng tìm hiểu!

Biên dịch PHP để lắp ráp web

Biên soạn PHP cho các trình duyệt không thực sự khó như bạn nghĩ. Sử dụng các tập lệnh biên dịch của Oraoto, thật dễ dàng để có được bản dựng PHP WASM hoạt động giống như PHP trên máy chủ hoặc trong CLI của bạn.

Vâng, chủ yếu là. Hiện tại nó hơi giới hạn vì nó chỉ cho phép bạn mã EVAL, sau đó nhận các dòng được in bởi PHP. Mặc dù vậy, có thể xây dựng một số thứ khá tuyệt vời.

Xây dựng một sân chơi bộ sưu tập Laravel

Tôi yêu bộ sưu tập của Laravel. Họ làm cho việc làm việc với các mảng dữ liệu trở nên tuyệt vời, nhưng đôi khi phải mất một chút mày mò và qua lại giữa mã của bạn và tài liệu để tìm ra cách thực hiện logic của bạn.love Laravel's collections. They make working with arrays of data awesome, but sometimes it takes a bit of tinkering and back and forth between your code and the docs to figure out how implement your logic.

Xây dựng một cái gì đó để mâu thuẫn với các bộ sưu tập trong trình duyệt, phong cách JSfiddle, dường như là một cơ hội tốt để kiểm tra PHP trong trình duyệt và xây dựng một cái gì đó tuyệt vời.

Bạn có thể kiểm tra kho lưu trữ trên GitHub và tự mình thử nó ở đây.

Hướng dẫn can you use php on client side? - bạn có thể sử dụng php ở phía máy khách không?

Làm thế nào nó hoạt động

Tôi đã xây dựng một gói PHP nhỏ nhận mã JSON & bộ sưu tập đầu vào từ VUE. Mã được biên dịch thành Phar (thực thi PHP) cùng với mã của thành phần thu thập của Laravel.

Nó chỉ đơn giản là chuyển đổi JSON thành một bộ sưu tập, và sau đó sử dụng eval để thực thi mã thu thập được cung cấp. Kết quả, hoặc bất kỳ lỗi nào (các trường hợp ngoại lệ hoặc đồ ném) được mã hóa lại thành JSON và in. Quay trở lại JavaScript, chúng tôi kết nối stdout của PHP và hiển thị kết quả thực thi lại với người dùng.

Nó hoạt động tốt một cách đáng ngạc nhiên, và nhờ sự hỗ trợ của PWA mà bạn thậm chí có thể sử dụng nó mà không cần internet.

Điều gì sẽ xảy ra nếu chúng ta có thể chạy Laravel ở phía khách hàng ?!

Thật tuyệt, chúng tôi đã xây dựng một cái gì đó chạy mã PHP, nhưng các bộ sưu tập khá đơn giản. Điều gì sẽ xảy ra nếu chúng ta có thể chạy toàn bộ ứng dụng web, được xây dựng ở phía khách hàng hoàn toàn của Laravel? Đó là sự thật không có máy chủ 😉

Dự án TODOMVC thường được sử dụng để kiểm tra các khung, vì vậy tôi nghĩ rằng nó sẽ là một ứng cử viên tốt để thử và chạy.

Rào cản đầu tiên chúng tôi phải giải quyết là đưa ra yêu cầu cho Laravel, vì không có máy chủ web nào chạy, chúng tôi không thể sử dụng yêu cầu web.

Thời gian để có được hacky! Chúng tôi thực sự có thể chạy khung với yêu cầu PSR7 bị chế giễu, tương tự như cách bạn sẽ chạy khung trong một thử nghiệm tích hợp. Vì chúng tôi chỉ có thể tương tác với PHP bằng cách thực thi mã, tôi đã kết thúc chu kỳ yêu cầu khung trong một hàm:

function run(string $requestAsJson, string $requestId)
{
    $requestData = json_decode($requestAsJson, true);

    require __DIR__ . '/bootstrap/autoload.php';

    $app = require_once __DIR__ . '/bootstrap/app.php';

    $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

    $_SERVER['CONTENT_TYPE'] = 'application/json';

    $request = \Illuminate\Http\Request::create(
        $requestData['uri'],
        $requestData['method'],
        $requestData['params'] ?? [],
        $requestData['cookies'] ?? [],
        [],
        $_SERVER,
        $requestData['body'] ?? null
    );


    /** @var \Illuminate\Http\Response $response */
    $response = $kernel->handle($request);

    echo json_encode([
        'id' => $requestId,
        'status' => $response->getStatusCode(),
        'content' => $response->getContent(),
        'headers' => $response->headers->all(),
    ]);

    $kernel->terminate($request, $response);
}

Sau khi kiểm tra nhanh trong bảng điều khiển để đảm bảo rằng nó hoạt động, chúng tôi có thể gói Laravel và tất cả các phụ thuộc của nó vào một hệ thống tệp ảo của Phar (EMSCIPTEN không xử lý tốt số lượng lớn các tệp) và xây dựng nó thành nhị phân lắp ráp web của chúng tôi.

Vì chúng tôi đã hướng dẫn Laravel sử dụng SQLite, trạng thái ứng dụng của chúng tôi có thể tồn tại giữa các yêu cầu (giả). Tuy nhiên, nó sẽ được đặt lại mỗi tải lại, vì lưu trữ chỉ là tạm thời.

Kiểm tra nó trong bảng điều khiển của trình duyệt, chúng tôi có thể thêm một mục việc cần làm mới và yêu cầu thực hiện phương thức chỉ mục:

function request(data) {
    const reqId = Math.random().toString(36).substring(7);
    const code = `$phar = 'phar://app.phar';require $phar . '/index.php';run('${JSON.stringify(data)}', '${reqId}');echo PHP_EOL;`;
    const ret = phpModule.ccall('pib_eval', 'number', ['string'], [code]);
}

// Add a todo item
request({
  uri: '/api',
  method: 'POST',
  body: JSON.stringify({
      title: 'do washing'
  })
})

// Get the todo list
request({
  uri: '/api',
  method: 'GET'
})

{
    "status": 200,
    "content": "[{\"id\":1,\"title\":\"do washing\",\"order\":null,\"completed\":false,\"created_at\":\"2019-10-06 07:25:29\",\"updated_at\":\"2019-10-06 07:25:29\",\"url\":\"\\\/1\"}]",
    "headers": {
        "cache-control": [
            "no-cache, private"
        ],
        "content-type": [
            "application\/json"
        ],
        "date": [
            "Sun, 06 Oct 2019 07:25:53 GMT"
        ],
        "x-ratelimit-limit": [
            "60"
        ],
        "x-ratelimit-remaining": [
            59
        ],
    }
}

Sự kết luận

Mặc dù thật thú vị khi đi vòng quanh với PHP trong trình duyệt, nhưng đó là một chặng đường dài từ việc có thể sử dụng được. Đây là một danh sách không đầy đủ về những nhược điểm:

  • Nó chậm hơn khoảng 5 lần so với PHP thông thường là
  • Nó sử dụng> 1GB bộ nhớ khi khởi động, khiến các thiết bị cấp dưới bị chug
  • Nó chỉ hoạt động trên các phiên bản máy tính để bàn gần đây của Chrome, Firefox và Safari
  • Phải mất nhiều thời gian để biên dịch bản dựng Wasm và cần thiết cho mọi thay đổi mã
  • Bạn không thể làm bất cứ điều gì JavaScript không thể làm. Điều này có nghĩa là không có yêu cầu web, giới hạn một tấn tiềm năng
  • Nó yêu cầu bạn tải xuống toàn bộ mã + mã PHP (trừ khi bạn đang lưu trữ phía khách hàng của nó) xuất hiện ở khoảng 4MB
  • Nó chỉ quyết định không làm việc đôi khi, và gỡ lỗi là khó khăn. Bạn không thể thấy nhiều ngoài mã thoát của PHP

Rõ ràng, nó không phù hợp cho việc sử dụng thế giới thực, nhưng có lẽ trong tương lai chúng ta có thể viết mã PHP cho phía khách hàng.

Hãy để lại một bình luận dưới đây nếu bạn có bất kỳ suy nghĩ hoặc đề xuất!

Là máy khách hoặc máy chủ PHP

PHP là ngôn ngữ tập lệnh phía máy chủ nguồn mở có cú pháp tương tự như của C và Perl;Để biết thêm, xem php.net và zend.com.server-side scripting language with syntax similar to that of C and Perl; for more, see php.net and zend.com .

PHP có được thực thi trên máy khách không?

PHP và?> Điều đó cho phép bạn nhảy vào và ra khỏi "Chế độ PHP".Điều phân biệt PHP với một cái gì đó như JavaScript phía máy khách là mã được thực thi trên máy chủ, tạo HTML sau đó được gửi đến máy khách.the code is executed on the server, generating HTML which is then sent to the client.