URL được kết nối với PHP như thế nào?

WordPress sử dụng cơ sở dữ liệu MySQL để lưu trữ tất cả dữ liệu của nó, bao gồm cả URL của trang web. Vì vậy, nếu vì lý do nào đó, bạn cần thay đổi URL WordPress của mình, thì cần phải chỉnh sửa một số dữ liệu trong MySQL. Hãy đọc để tìm hiểu làm thế nào để làm điều đó

URL được kết nối với PHP như thế nào?

1. Xác định tên của cơ sở dữ liệu WordPress MySQL

Bỏ qua phần này nếu bạn chỉ có một cơ sở dữ liệu MySQL. Tuy nhiên, nếu bạn có nhiều cơ sở dữ liệu và không chắc cơ sở dữ liệu nào được kết nối với WordPress của mình, thì hãy làm theo các bước bên dưới

WordPress lưu trữ tên cơ sở dữ liệu MySQL và thông tin đăng nhập của chúng trong wp-config. tập tin php. Bạn có thể tìm thấy tệp này trong thư mục tệp gốc của mình

  1. Truy cập hPanel của bạn và mở Trình quản lý tệp
  2. Chọn tên miền, sau đó nhấp vào Chuyển đến Trình quản lý tệp

URL được kết nối với PHP như thế nào?

  1. Mở wp-config. php và tìm kiếm DB_NAME. Giá trị của tham số này là tên cơ sở dữ liệu của bạn. Chẳng hạn, tên của cơ sở dữ liệu MySQL của chúng tôi là u923246418_gagap
    URL được kết nối với PHP như thế nào?

2. Thay đổi URL WordPress trong cơ sở dữ liệu MySQL

Để thay thế URL hiện tại của bạn, hãy làm theo các bước sau

  1. Truy cập phpMyAdmin qua bảng điều khiển trang web của bạn
  2. Bảng điều khiển bên trái liệt kê tất cả các cơ sở dữ liệu của bạn. Chọn một trang được kết nối với trang web WordPress của bạn và chuyển đến tab SQL
    URL được kết nối với PHP như thế nào?
  3. Nhập truy vấn SQL sau
    UPDATE wp_options SET option_value = replace(option_value, 'oldurl.com', 'newurl.com') WHERE option_name = 'home' OR option_name = 'siteurl';UPDATE wp_posts SET guid = replace(guid, 'oldurl.com','newurl.com');UPDATE wp_posts SET post_content = replace(post_content, 'oldurl.com', 'newurl.com'); UPDATE wp_postmeta SET meta_value = replace(meta_value,'oldurl.com','newurl.com');

    Thay thế oldurl. com với địa chỉ WordPress hiện tại của bạn và newurl. com với địa chỉ WordPress mới của bạn

Quan trọng. Tiền tố bảng của bạn có thể không phải là wp_. Xem tiền tố bảng chính xác trên bảng điều khiển bên trái của phpMyAdmin và cập nhật truy vấn SQL

  • Nhấn Đi. Bạn sẽ thấy thông báo thành công cùng với số hàng đã thay đổi. Lưu ý rằng số lượng hàng sẽ khác nhau đối với mỗi trang web WordPress
    URL được kết nối với PHP như thế nào?
  • Điều cuối cùng chúng ta cần làm là xác minh các thay đổi. Mở bảng wp_options và kiểm tra option_value củasiteurl và home. Bạn sẽ thấy URL mới của mình
    URL được kết nối với PHP như thế nào?
  • Nếu bạn nhận được thông báo lỗi và các truy vấn không được thực thi, hãy kiểm tra mã của bạn để tìm lỗi cú pháp và đảm bảo rằng bạn đang sử dụng đúng tiền tố bảng. Liên hệ với bộ phận hỗ trợ lưu trữ để được hỗ trợ thêm nếu lỗi vẫn còn

    Phần kết luận

    Chúng ta vừa học cách thay đổi URL WordPress trong cơ sở dữ liệu MySQL bằng phpMyAdmin

    Như chúng ta có thể thấy, tất cả các bước trên khá đơn giản. Bạn chỉ cần xác định đúng cơ sở dữ liệu và sau đó nhập một số dòng mã

    Chúng tôi hy vọng hướng dẫn này có thể cung cấp cho bạn hướng dẫn rõ ràng về cách thay đổi URL WordPress trong cơ sở dữ liệu MySQL. Vui lòng để lại bất kỳ câu hỏi nào bạn có bên dưới

    Tìm hiểu các kỹ thuật WordPress nâng cao khác

    Cách định vị và tạo WordPress. htaccess Tệp trên cPanel và hPanel
    Cách thực hiện tìm kiếm và thay thế WordPress trong cơ sở dữ liệu
    Khái niệm cơ bản về sử dụng WordPress WP_Query + Ví dụ với mã
    Cách sử dụng XAMPP để thiết lập trang web WordPress cục bộ
    Cách tăng tốc trang web WordPress

    Tác giả

    Domantas G

    Domantas dẫn dắt các nhóm nội dung và SEO về phía trước với những ý tưởng mới và phương pháp tiếp cận vượt trội. Được trang bị kiến ​​thức sâu rộng về SEO và tiếp thị, anh đặt mục tiêu quảng bá Hostinger đến mọi nơi trên thế giới. Trong thời gian rảnh rỗi, Domantas thích trau dồi kỹ năng phát triển web của mình và đi du lịch đến những nơi xa lạ

    Gần đây, đồng nghiệp của tôi, Niels, đã viết một bài đăng tuyệt vời cho biết cách xây dựng trình rút ngắn URL bằng cách sử dụng. NET và Redis. Khi đọc nó, tôi đã được truyền cảm hứng đến mức quyết định xây dựng công cụ rút ngắn URL của riêng mình bằng PHP và PostgreSQL thay vì. NET và Redis, vì tôi biết những công nghệ đó tốt hơn nhiều

    Vậy điều gì hấp dẫn khi xây dựng một công cụ rút ngắn URL? . lý, ngắn. io hoặc. Thành thật mà nói, khái niệm này đã thu hút sự chú ý của tôi và truyền cảm hứng cho tôi

    Nó không có tất cả các tính năng mà bạn có thể mong đợi ở một dịch vụ chuyên nghiệp, chẳng hạn như tùy chỉnh URL, phân tích và theo dõi lần nhấp, liên kết có thương hiệu hoặc khả năng thêm CTA (Gọi hành động). Tuy nhiên, nó có chứa các yếu tố cần thiết

    Hướng dẫn điều kiện tiên quyết

    Để làm theo cùng với hướng dẫn này, bạn sẽ cần những điều sau đây

    • Docker Engine và Docker Compose HOẶC PHP 8. 1 với các phần mở rộng PDO và PDO_PGSQL được cài đặt và kích hoạt và PostgreSQL 14 trở lên
    • IDE hoặc trình chỉnh sửa mã yêu thích của bạn
    • cài đặt trên toàn cầu

    Tôi nghĩ rằng tôi nên tiếp cận hướng dẫn này hơi khác so với những hướng dẫn trước đây của tôi và đưa ra lựa chọn chạy ứng dụng với Docker Compose hoặc trực tiếp với máy chủ web tích hợp sẵn của PHP và PostgreSQL

    Lý do đằng sau điều này là việc thiết lập PHP và PostgreSQL theo yêu cầu trên máy phát triển cục bộ của bạn có thể mất nhiều thời gian hơn mức cần thiết và khiến bạn mất tập trung vào hướng dẫn. Trong khi đó, với Docker Compose, tất cả có thể được thực hiện trong khoảng 60 giây

    Tuy nhiên, vui lòng thiết lập PHP và PostgreSQL, nếu đó là điều bạn thích. Bạn có thể tìm thấy lược đồ cơ sở dữ liệu trong kho lưu trữ GitHub đi kèm với hướng dẫn này, cùng với các hướng dẫn khác mà bạn cần trong README của kho lưu trữ. tập tin md

    Nếu bạn là người mới sử dụng Docker Compose và muốn được hỗ trợ thêm một chút, thì hãy tải về cuốn sách miễn phí của tôi. Nó có tất cả những gì bạn cần biết để bắt đầu và chạy nhanh chóng

    Tổng quan về ứng dụng

    Trước khi bạn đi sâu vào phần hướng dẫn, hãy tìm hiểu cách thức hoạt động của ứng dụng. Ứng dụng này sẽ bao gồm ba tuyến đường

    1. Tuyến đầu tiên (mặc định) hiển thị biểu mẫu nơi người dùng có thể nhập URL dài hơn để rút ngắn. Khi gửi, nếu biểu mẫu vượt qua xác thực, thì URL sẽ được rút ngắn. Sau đó, cả URL gốc và URL rút gọn sẽ được lưu trữ trong cơ sở dữ liệu
    2. Tuyến thứ hai truy xuất một URL chưa được rút ngắn từ một URL đã rút ngắn. Nếu tìm thấy URL rút ngắn trong cơ sở dữ liệu, người dùng sẽ được chuyển hướng đến đó. Nếu không, người dùng sẽ được chuyển hướng đến trang 404 của ứng dụng
    3. Lộ trình thứ ba là trang 404 của ứng dụng

    Ứng dụng này là một ứng dụng Slim Framework nhỏ bao gồm phần lớn gồm hai lớp. dịch vụ rút ngắn URL (

    mkdir -p ^
        php-url-shortener/src/templates ^
        php-url-shortener/src/UrlShortener ^
        php-url-shortener/public
    
    5) và dịch vụ duy trì cơ sở dữ liệu (
    mkdir -p ^
        php-url-shortener/src/templates ^
        php-url-shortener/src/UrlShortener ^
        php-url-shortener/public
    
    6). Ứng dụng chỉ tương tác trực tiếp với dịch vụ rút ngắn URL, vì dịch vụ đó chứa dịch vụ duy trì cơ sở dữ liệu, một biến thành viên, xử lý tương tác cơ sở dữ liệu

    Bây giờ, chúng ta hãy xây dựng

    Tạo thư mục dự án

    Như (hầu như) luôn luôn, điều đầu tiên cần làm là tạo cấu trúc thư mục của dự án, khá nông và không phức tạp

    Để tạo nó, hãy chạy lệnh bên dưới

    mkdir -p \
        php-url-shortener/src/{templates,UrlShortener} \
        php-url-shortener/public
    

    Nếu bạn đang sử dụng Microsoft Windows, hãy sử dụng lệnh sau để thay thế

    mkdir -p ^
        php-url-shortener/src/templates ^
        php-url-shortener/src/UrlShortener ^
        php-url-shortener/public
    

    Đặt các biến môi trường cần thiết

    Điều tiếp theo cần làm là đặt các biến môi trường mà ứng dụng yêu cầu để tương tác với cơ sở dữ liệu

    Tải xuống. env. ví dụ, từ kho lưu trữ GitHub cho dự án này, vào thư mục cấp cao nhất của dự án và đặt tên cho nó. env. Vui lòng thay đổi các giá trị mặc định cho bất kỳ biến nào bắt đầu bằng

    mkdir -p ^
        php-url-shortener/src/templates ^
        php-url-shortener/src/UrlShortener ^
        php-url-shortener/public
    
    7 để phù hợp với cấu hình máy chủ PostgreSQL của bạn

    Nếu bạn đang sử dụng Docker Compose, không thay đổi giá trị của

    mkdir -p ^
        php-url-shortener/src/templates ^
        php-url-shortener/src/UrlShortener ^
        php-url-shortener/public
    
    8. Nó phải được đặt thành
    mkdir -p ^
        php-url-shortener/src/templates ^
        php-url-shortener/src/UrlShortener ^
        php-url-shortener/public
    
    9. Ngoài ra, vui lòng không thay đổi các biến bắt đầu bằng
    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    0

    Lược đồ cơ sở dữ liệu

    Đây là lược đồ cơ sở dữ liệu trong tất cả vinh quang của nó. Chỉ một bảng, tên là

    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    1 chứa ba cột

    • Dài. Cái này chứa URL dài (gốc)
    • ngắn ngủi. Điều này chứa URL rút ngắn
    • created_at. Đây là dấu thời gian được chèn tự động về thời gian hàng được tạo

    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    

    Nếu bạn đang sử dụng Docker Compose, cơ sở dữ liệu sẽ được khởi tạo cho bạn khi bạn khởi động ứng dụng. Nếu không, hãy chạy SQL ở trên bằng cách sử dụng psql (thiết bị đầu cuối tương tác của PostgreSQL) hoặc công cụ cơ sở dữ liệu mà bạn chọn (chẳng hạn như DataGrip hoặc công cụ cơ sở dữ liệu trong PhpStorm)

    Thêm các phụ thuộc cần thiết

    Điều tiếp theo cần làm là thêm tất cả các phụ thuộc mà dự án cần. đó là

    Các phần phụ thuộc PHP bắt buộc DependencyDescriptionlaminas/laminas-dblaminas-db cung cấp lớp trừu tượng hóa cơ sở dữ liệu tuyệt vời và triển khai trừu tượng hóa SQL. laminas/laminas-diactoroslaminas-diactoros cung cấp triển khai Thông báo HTTP PSR. Nó được đưa vào vì tôi thấy rằng các lớp phản hồi tùy chỉnh là một cách trực quan để trả về phản hồi từ các yêu cầu. laminas/laminas-inputfilterlaminas-inputfilter lọc và xác thực dữ liệu từ nhiều nguồn, bao gồm tệp, đầu vào của người dùng và API. laminas/laminas-urilaminas-uri giúp thao tác và xác thực URI (Mã định danh tài nguyên thống nhất). php-di/slim-bridgeSlim Bridge tích hợp PHP-DI, một bộ chứa phụ thuộc (DI) tuyệt vời, với Slim. slim/psr7Thư viện này tích hợp PSR-7 vào ứng dụng. Nó không thực sự cần thiết, nhưng tôi cảm thấy nó làm cho ứng dụng dễ bảo trì và di động hơn. slim/slimĐây là cốt lõi của Slim micro frameworkslim/twig-view Gói này tích hợp công cụ tạo khuôn mẫu Twig giúp việc tạo nội dung phản hồi trở nên dễ dàng hơn. vlucas/phpdotenvPHP dotenv giúp loại bỏ các chi tiết cấu hình nhạy cảm khỏi mã (và kiểm soát phiên bản)

    Để cài đặt chúng, hãy chạy lệnh bên dưới

    composer require \
        laminas/laminas-inputfilter \
        laminas/laminas-uri \
        laminas/laminas-diactoros \
        laminas/laminas-db \
        php-di/slim-bridge \
        slim/psr7 \
        slim/slim \
        slim/twig-view \
        vlucas/phpdotenv
    

    Thêm bộ nạp tự động PSR-4

    Điều tiếp theo mà bạn cần làm là thêm trình tải tự động PSR-4, mà ba lớp mà bạn sẽ viết sẽ cần. Để thêm nó, hãy thêm cấu hình bên dưới, sau trong trình soạn thảo. json

    "autoload": {
        "psr-4": {
            "UrlShortener\\": "src/UrlShortener"
        }
    }
    

    Sau đó, chạy lệnh bên dưới để cập nhật

    composer dump-autoload
    

    Viết mã

    Bây giờ, đã đến lúc viết mã

    UrlShortenerPersistenceGiao diện

    Điều đầu tiên bạn sẽ làm là tạo một giao diện. Chắc chắn, nó không thực sự cần thiết. Nhưng tôi rất tin tưởng vào chương trình giao diện chứ không phải triển khai. Vì vậy, tôi hy vọng bạn sẽ hài hước với tôi về điểm này

    Trong src/UrlShortener, tạo một tệp mới có tên UrlShortenerPersistenceInterface. php và trong tệp đó thêm mã bên dưới

    Giao diện xác định ba chức năng

    • CREATE TABLE IF NOT EXISTS urls (
          long   TEXT NOT NULL UNIQUE,
          short  CHARACTER(17) NOT NULL,
          created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
          PRIMARY KEY (long, short),
          UNIQUE(short, long)
      );
      
      2. truy xuất một URL dài bằng URL ngắn được cung cấp
    • CREATE TABLE IF NOT EXISTS urls (
          long   TEXT NOT NULL UNIQUE,
          short  CHARACTER(17) NOT NULL,
          created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
          PRIMARY KEY (long, short),
          UNIQUE(short, long)
      );
      
      3. kiểm tra xem có tồn tại một URL ngắn không
    • CREATE TABLE IF NOT EXISTS urls (
          long   TEXT NOT NULL UNIQUE,
          short  CHARACTER(17) NOT NULL,
          created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
          PRIMARY KEY (long, short),
          UNIQUE(short, long)
      );
      
      4. lưu trữ một tổ hợp URL dài và ngắn trong cơ sở dữ liệu

    UrlShortenerDatabaseService

    Điều tiếp theo cần làm là tạo một tệp mới khác trong src/UrlShortener có tên UrlShortenerDatabaseService. php và trong tệp đó thêm đoạn mã sau

    tableGateway = $tableGateway;
        }
    
        public function getLongUrl(string $shortUrl): string
        {
            $rowSet = $this
                ->tableGateway
                ->select(
                    function (Select $select) use ($shortUrl) {
                        $select
                            ->columns(['long'])
                            ->where(['short' => $shortUrl]);
                    }
                );
    
            $record = $rowSet->current();
    
            return $record['long'];
        }
    
        public function hasShortUrl(string $shortUrl): bool
        {
            $rowSet = $this
                ->tableGateway
                ->select(
                    function (Select $select) use ($shortUrl) {
                        $select
                            ->columns(['count' => new Expression("COUNT(*)")])
                            ->where(['short' => $shortUrl]);
                    }
                );
    
            $record = $rowSet->current();
    
            return (bool)$record['count'];
        }
    
        public function persistUrl(string $longUrl, string $shortenedUrl): bool
        {
            $insert = new Insert('urls');
            $insert
                ->columns(['long', 'short'])
                ->values([$longUrl, $shortenedUrl]);
    
            return (bool)$this->tableGateway->insertWith($insert);
        }
    }
    

    Lớp này cung cấp triển khai cụ thể của

    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    5, sử dụng laminas-db để kết nối với phần phụ trợ cơ sở dữ liệu PostgreSQL

    Vâng, có các tùy chọn khác trong PHP để tương tác với cơ sở dữ liệu, chẳng hạn như Doctrine, nhưng laminas-db là một thư viện nhỏ mà tôi đã yêu thích trong nhiều năm qua. Nếu bạn muốn biết thêm về nó, hãy xem khóa học laminas-db Pluralsight của tôi (trước đây gọi là "Zend Db")

    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    2 cố gắng truy xuất bất kỳ URL dài nào (có trong cột có tên
    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    7) từ bảng
    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    1 có URL ngắn (có trong cột
    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    9) khớp với URL ngắn được cung cấp (
    composer require \
        laminas/laminas-inputfilter \
        laminas/laminas-uri \
        laminas/laminas-diactoros \
        laminas/laminas-db \
        php-di/slim-bridge \
        slim/psr7 \
        slim/slim \
        slim/twig-view \
        vlucas/phpdotenv
    
    0)

    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    3 xác định xem có tồn tại một URL ngắn hay không bằng cách truy xuất tổng số tất cả các hàng trong bảng
    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    1 có giá trị cột
    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    9 khớp với URL ngắn được cung cấp. Cuối cùng,
    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    4 chèn một tổ hợp URL dài và ngắn mới vào bảng
    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    1

    Dịch vụ rút ngắn url

    Lớp thứ ba và lớp cuối cùng là

    mkdir -p ^
        php-url-shortener/src/templates ^
        php-url-shortener/src/UrlShortener ^
        php-url-shortener/public
    
    5. Tạo một tệp mới trong src/UrlShortener có tên là UrlShortenerService. php và trong tệp đó thêm đoạn mã sau

    shortenerPersistence = $urlShortenerPersistence;
        }
    
        public function getShortUrl(string $longUrl): string
        {
            $shortUrl = $this->shortenUrl($longUrl);
            $this
                ->shortenerPersistence
                ->persistUrl($longUrl, $shortUrl);
    
            return $shortUrl;
        }
    
        public function hasShortUrl(string $longUrl): bool
        {
            return $this->shortenerPersistence->hasShortUrl($longUrl);
        }
    
        public function getLongUrl(string $shortUrl): string
        {
            $longUrl = $this
                ->shortenerPersistence
                ->getLongUrl($shortUrl);
    
            return $longUrl;
        }
    
        protected function shortenUrl(string $longUrl): string
        {
            $shortenedUrl = substr(
                base64_encode(
                    sha1(
                        uniqid(
                            random_bytes(self::RANDOM_BYTES),
                            true
                        )
                    )
                ),
                0,
                self::SHORT_URL_LENGTH
            );
    
            return $shortenedUrl;
        }
    }
    

    Như đã đề cập trước đó, đây là lớp mà ứng dụng trực tiếp sử dụng để cung cấp chức năng của nó. Nó được khởi tạo với một đối tượng

    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    5 để nó có thể tương tác với kho dữ liệu phụ trợ. Việc triển khai của nó đối với
    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    2 và
    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    3 chỉ ủy quyền cho các phương thức cùng tên trên đối tượng
    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    5

    Tuy nhiên, việc triển khai

    "autoload": {
        "psr-4": {
            "UrlShortener\\": "src/UrlShortener"
        }
    }
    
    1 của nó gọi phương thức
    "autoload": {
        "psr-4": {
            "UrlShortener\\": "src/UrlShortener"
        }
    }
    
    2, phương thức này rút ngắn URL gốc/dài được cung cấp trước khi chuyển URL đã rút gọn tới
    CREATE TABLE IF NOT EXISTS urls (
        long   TEXT NOT NULL UNIQUE,
        short  CHARACTER(17) NOT NULL,
        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (long, short),
        UNIQUE(short, long)
    );
    
    4, duy trì cả URL dài và ngắn trong cơ sở dữ liệu

    "autoload": {
        "psr-4": {
            "UrlShortener\\": "src/UrlShortener"
        }
    }
    
    2 sử dụng kết hợp các hàm nền, base64_encode, sha1, random_bytes và uniqid của PHP để tạo URL gồm 9 ký tự. Nó bắt đầu bằng cách tạo 32 byte ngẫu nhiên. Từ các byte ngẫu nhiên đó, nó tạo ra một mã định danh duy nhất có yếu tố trong thời gian hiện tại tính bằng micro giây để giúp đảm bảo tính duy nhất

    Sau đó, SHA1 của id duy nhất được tạo, sau đó được mã hóa Base64 để tạo biểu diễn giống như URL của hàm băm. Cuối cùng, chuỗi được cắt bớt chỉ còn chín ký tự đầu tiên nằm trong phạm vi của hầu hết các URL rút ngắn hiện đại và chuỗi đó được trả về

    Chắc chắn là tôi không biết liệu sẽ có va chạm hay không và nếu có thì tần suất như thế nào, nhưng điều này không có nghĩa là một triển khai siêu phức tạp

    Xin chân thành cảm ơn Nomad PHP vì cốt lõi của chức năng này

    Tạo tệp bootstrap

    Tiếp theo, đã đến lúc tạo tệp bootstrap, nơi tất cả các yêu cầu tới ứng dụng được định tuyến. Tạo một tệp mới trong chỉ mục có tên công khai. php và trong tệp đó thêm đoạn mã sau

    load();
    
    $container = new Container;
    $container->set(InputFilter::class, function(ContainerInterface $container): InputFilter {
        $url = new Input('url');
        $url->getValidatorChain()
            ->attach(new NotEmpty([
                'messages' => [
                    NotEmpty::IS_EMPTY => 'Please provide a URL'
                ]
            ]))
            ->attach(new Uri([
                'messages' => [
                    Uri::INVALID => 'That URL is not valid',
                    Uri::NOT_URI => 'That URL is not valid',
                ]
            ]))
            ->attach(new NoRecordExists([
                'table'   => $_SERVER['DB_TABLE_NAME'],
                'field'   => 'long',
                'adapter' => $container->get(Adapter::class),
                'messages' => [
                    NoRecordExists::ERROR_RECORD_FOUND => 'That URL has already been shortened. Please try another one.'
                ]
            ]));
        $url->getFilterChain()
            ->attach(new StringTrim())
            ->attach(new StripTags());
    
        $inputFilter = new InputFilter();
        $inputFilter->add($url);
    
        return $inputFilter;
    });
    
    $container->set(Adapter::class, function(): Adapter {
        return new Adapter([
            'database' => $_SERVER['DB_NAME'],
            'driver'   => 'Pdo_Pgsql',
            'host'     => $_SERVER['DB_HOST'],
            'password' => $_SERVER['DB_PASSWORD'],
            'username' => $_SERVER['DB_USERNAME'],
        ]);
    });
    
    $container->set(
        UrlShortenerService::class,
        function (ContainerInterface $container): UrlShortenerService {
            $tableGateway = new TableGateway(
                'urls',
                $container->get(Adapter::class),
                [new RowGatewayFeature(['long', 'short'])]
            );
            return new UrlShortenerService(
                new UrlShortenerDatabaseService($tableGateway)
            );
        }
    );
    
    AppFactory::setContainer($container);
    $app = AppFactory::create();
    
    $app->add(TwigMiddleware::create(
        $app,
        Twig::create(__DIR__ . '/../src/templates/', ['cache' => false])
    ));
    
    $app->map(['GET','POST'], '/',
        function (Request $request, Response $response, array $args)
        {
            $data = [];
    
            if ($request->getMethod() === 'POST') {
                /** @var InputFilter $filter */
                $filter = $this->get(InputFilter::class);
                $filter->setData((array)$request->getParsedBody());
                if (! $filter->isValid()) {
                    $data['errors'] = $filter->getMessages();
                    $data['values'] = $filter->getValues();
                } else {
                    /** @var UrlShortenerService $shortener */
                    $shortener = $this->get(UrlShortenerService::class);
                    try {
                        $shortUrl = $shortener->getShortUrl(
                            $filter->getValue('url')
                        );
                        $data = array_merge(
                            $data,
                            [
                                'shortUrl' => $shortUrl,
                                'longUrl' => $filter->getValue('url'),
                                'success' => true
                            ]
                        );
                    } catch (InvalidQueryException $e) {
                        echo $e->getMessage();
                    }
                }
            }
    
            return Twig::fromRequest($request)
                ->render($response, 'default.html.twig', $data);
        }
    );
    
    $app->get('/{url:[a-zA-Z0-9]{9}}',
        function (Request $request, Response $response, array $args) {
            /** @var InputFilter $filter */
            $filter = $this->get(InputFilter::class);
            $filter->setData($args);
    
            /** @var UrlShortenerService $shortener */
            $shortener = $this->get(UrlShortenerService::class);
    
            if ($filter->isValid() &&
                $shortener->hasShortUrl($filter->getValue('url')))
            {
                return new RedirectResponse(
                    $shortener->getLongUrl($filter->getValue('url'))
                );
            }
    
            return new JsonResponse(
                sprintf("No URL matching '%s' available", $filter->getValue('url')),
                404
            );
        }
    );
    
    $errorMiddleware = $app->addErrorMiddleware(true, true, true);
    $errorMiddleware->setDefaultErrorHandler(function (
        Request $request
    ) use ($app)
    {
        $response = $app->getResponseFactory()->createResponse();
        return Twig::fromRequest($request)
            ->render($response, '404.html.twig', []);
    });
    
    $app->run();
    

    Mã bắt đầu bằng cách nhập tất cả các lớp mà nó sẽ sử dụng, cùng với. Sau đó (như tôi thường làm trong các hướng dẫn về Twilio của mình), nó sử dụng PHP Dotenv để nhập các biến môi trường cần thiết từ. env mà bạn đã tạo và điền trước đó

    Sau đó, nó khởi tạo phiên bản vùng chứa DI mới (

    "autoload": {
        "psr-4": {
            "UrlShortener\\": "src/UrlShortener"
        }
    }
    
    5) và đăng ký ba dịch vụ với vùng chứa

    • Đầu tiên là một phiên bản InputFilter sẽ được sử dụng để lọc và xác thực URL được gửi ở dạng tuyến đường mặc định. Để xác thực thành công, chuỗi đã gửi cần phải là một URL hợp lệ (vì trình xác thực Uri) và chưa tồn tại trong bảng
      CREATE TABLE IF NOT EXISTS urls (
          long   TEXT NOT NULL UNIQUE,
          short  CHARACTER(17) NOT NULL,
          created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
          PRIMARY KEY (long, short),
          UNIQUE(short, long)
      );
      
      1 (vì trình xác thực). Ngoài ra, chuỗi sẽ được cắt bớt và loại bỏ bất kỳ thẻ HTML nào
    • Dịch vụ thứ hai cung cấp một đối tượng Bộ điều hợp laminas-db sẽ được sử dụng gián tiếp bởi
      mkdir -p ^
          php-url-shortener/src/templates ^
          php-url-shortener/src/UrlShortener ^
          php-url-shortener/public
      
      5 để nó có thể kết nối với cơ sở dữ liệu
    • Dịch vụ thứ ba cung cấp một đối tượng
      mkdir -p ^
          php-url-shortener/src/templates ^
          php-url-shortener/src/UrlShortener ^
          php-url-shortener/public
      
      5. Điều này nhận một đối tượng TableGateway, được khởi tạo với đối tượng
      "autoload": {
          "psr-4": {
              "UrlShortener\\": "src/UrlShortener"
          }
      }
      
      9, được trả về từ dịch vụ vùng chứa có tên như vậy, cho phép nó tương tác với cơ sở dữ liệu để lưu trữ, kiểm tra và truy xuất cả URL dài và ngắn

    Sau đó, một đối tượng Ứng dụng mỏng mới (

    composer dump-autoload
    
    0) được khởi tạo và chuyển đối tượng bộ chứa DI để mỗi tuyến của ứng dụng có thể truy cập các dịch vụ của bộ chứa. TwigMiddleware được thêm vào đối tượng
    composer dump-autoload
    
    1 để mỗi tuyến đường đã đăng ký có thể trả về phản hồi bằng cách hiển thị các mẫu Twig

    Sau đó, hai tuyến đường được xác định. Cái đầu tiên là route mặc định của ứng dụng. Nó chấp nhận cả yêu cầu GET và POST. Nếu tuyến được yêu cầu với yêu cầu POST, dữ liệu POST của yêu cầu sẽ được truy xuất và xác thực bằng dịch vụ

    composer dump-autoload
    
    2. Nếu dữ liệu không xác thực được, hai biến mẫu được đặt

    1. URL được gửi trong biểu mẫu
    2. Lỗi hiển thị tại sao biểu mẫu không xác thực được

    Nếu biểu mẫu vượt qua quá trình xác thực, thì ____0_______5 được truy xuất từ ​​vùng chứa và một nỗ lực được thực hiện để rút ngắn URL và duy trì URL đã rút ngắn, cùng với URL ban đầu, vào cơ sở dữ liệu. Nếu thành công, ba biến mẫu được đặt

    1. URL rút gọn
    2. URL ban đầu, dài hơn
    3. Một lá cờ để cho biết rằng biểu mẫu đã được gửi thành công

    Tại thời điểm này hoặc nếu tuyến đường được yêu cầu bằng yêu cầu GET, src/templates/default. html. twig được hiển thị với các biến mẫu và được trả về dưới dạng phần thân của phản hồi

    Sau đó, đến tuyến đường thứ hai chỉ chấp nhận các yêu cầu GET. Đường dẫn của tuyến đường phải khớp với

    composer dump-autoload
    
    4 theo sau là chín ký tự. Đây có thể là bất kỳ sự kết hợp nào của các chữ cái viết thường hoặc viết hoa giữa A & Z và các số từ 0 đến 9; .
    composer dump-autoload
    
    5

    Nếu tuyến đường được yêu cầu phù hợp, thì đường dẫn sau dấu gạch chéo lên phía trước được lưu trữ trong một đối số yêu cầu có tên là

    composer dump-autoload
    
    6. Sau đó, sử dụng dịch vụ
    composer dump-autoload
    
    2, URL được xác thực và lọc. Nếu nó vượt qua xác thực,
    mkdir -p ^
        php-url-shortener/src/templates ^
        php-url-shortener/src/UrlShortener ^
        php-url-shortener/public
    
    5 sẽ kiểm tra xem URL rút gọn có tồn tại trong cơ sở dữ liệu không. Nếu vậy, URL ban đầu được liên kết với nó sẽ được truy xuất và trả lại. Mặt khác, phản hồi HTTP 404 được trả về, cho người dùng biết rằng không tìm thấy URL rút ngắn

    Sau đó, lỗi phần mềm trung gian được thêm vào từng yêu cầu và được xử lý bởi một chức năng ẩn danh. Phần mềm trung gian này ở đó để xử lý các phản hồi 404 mà ứng dụng hai tuyến đường có thể trả về. Nó làm như vậy bằng cách truy xuất phản hồi đầu tiên từ đối tượng ứng dụng Slim và sau đó đặt phần thân của phản hồi là kết quả của việc hiển thị src/templates/404. html. cành cây mà bạn sẽ sớm thấy

    Sau đó, phương thức

    0 của
    composer dump-autoload
    
    0 được gọi để khởi chạy ứng dụng

    Tạo các mẫu

    Bạn sắp hoàn thành việc xây dựng logic của ứng dụng. Bây giờ là lúc tạo các mẫu Twig cho route mặc định và cho trang 404

    Tạo mẫu lõi

    Trong src/templates, tạo một tệp mới có tên base. html. cành cây. Trong tệp đó, dán đoạn mã sau

    mkdir -p ^
        php-url-shortener/src/templates ^
        php-url-shortener/src/UrlShortener ^
        php-url-shortener/public
    
    0

    Mẫu này cung cấp nội dung chung cho cả hai mẫu tôi. e. , các phần tử đầu, nội dung và chân trang. Nếu bạn không quen thuộc với Twig, hãy lưu ý việc sử dụng mã như

    1

    Các khối này tạo thành cơ sở của. Đây là nơi một mẫu, một mẫu cơ sở, có thể được mở rộng bởi các mẫu khác. Khi họ làm như vậy, họ có thể đặt nội dung của các khối này theo cách có ý nghĩa trong ngữ cảnh đó. Bạn sẽ sớm thấy các ví dụ về điều này

    Tạo mẫu của tuyến đường mặc định

    Bây giờ, tạo một tệp mới khác trong src/templates, lần này được đặt tên là default. html. cành cây. Trong tệp đó, dán mã bên dưới

    mkdir -p ^
        php-url-shortener/src/templates ^
        php-url-shortener/src/UrlShortener ^
        php-url-shortener/public
    
    1

    Đây là mẫu cho tuyến đường mặc định. Nó bắt đầu bằng cách mở rộng cơ sở. html. twig, cho phép nó đặt nội dung sẽ xuất hiện trong bất kỳ khối nào được xác định trong mẫu đó. Cụ thể, nó đặt tiêu đề của trang và tiêu đề H1 thành "PHP Url Shortener". Sau đó, nó đặt nội dung chính của trang thành một dạng nhỏ nơi người dùng có thể nhập URL để rút ngắn

    Nếu một URL được rút ngắn thành công, URL được rút ngắn sẽ được hiển thị phía trên biểu mẫu cùng với URL ban đầu. Nếu biểu mẫu không xác thực thành công, thay vào đó, các lỗi xác thực biểu mẫu sẽ được hiển thị phía trên biểu mẫu

    Tạo mẫu của trang 404

    Cuối cùng, tạo một tệp mới thứ ba trong src/templates, lần này có tên là 404. html. cành cây. Trong tệp đó, dán mã bên dưới

    mkdir -p ^
        php-url-shortener/src/templates ^
        php-url-shortener/src/UrlShortener ^
        php-url-shortener/public
    
    2

    Như với mẫu của tuyến đường mặc định, mẫu này bắt đầu bằng cách mở rộng cơ sở. html. cành cây. Nó đặt tiêu đề của trang thành "Không tìm thấy URL 404. " và tiêu đề H1 của trang thành "Rất tiếc. URL đó không được tìm thấy". Cuối cùng, nó đặt nội dung thành "Rất tiếc phải nói điều đó, nhưng URL đó không khả dụng. " cùng với một liên kết đến tuyến đường mặc định để người dùng có thể cố gắng rút ngắn một liên kết

    Tải xuống biểu định kiểu

    Bây giờ, còn một việc cuối cùng cần làm, đó là tải xuống biểu định kiểu từ kho lưu trữ GitHub đi kèm với hướng dẫn này để ứng dụng hiển thị như mong đợi. Tải xuống public/css và đặt tên cho nó là styles. css

    Kiểm tra xem ứng dụng có hoạt động không

    Bây giờ bạn đã hoàn tất việc kết hợp ứng dụng, đã đến lúc kiểm tra xem nó có hoạt động không

    Khởi động ứng dụng bằng Docker Compose

    Trước khi bạn có thể khởi động ứng dụng, hãy tải xuống kho lưu trữ zip có chứa trình soạn thảo docker. yml và tất cả các tệp hỗ trợ. Sau đó, trích xuất nội dung của nó trong thư mục cấp cao nhất của dự án

    Sau đó, khởi động ứng dụng bằng cách chạy lệnh sau

    mkdir -p ^
        php-url-shortener/src/templates ^
        php-url-shortener/src/UrlShortener ^
        php-url-shortener/public
    
    3

    Nếu không, hãy chạy lệnh sau để sử dụng máy chủ web tích hợp của PHP để chạy ứng dụng

    mkdir -p ^
        php-url-shortener/src/templates ^
        php-url-shortener/src/UrlShortener ^
        php-url-shortener/public
    
    4

    URL được kết nối với PHP như thế nào?

    Bất kể bạn đã khởi động ứng dụng như thế nào, giờ đây nó sẽ khả dụng trên máy chủ cục bộ trên cổng 8080. Mở nó trong trình duyệt bạn chọn, nơi nó sẽ trông giống như ảnh chụp màn hình bên dưới

    URL được kết nối với PHP như thế nào?

    Bây giờ, chọn một URL để rút ngắn, chẳng hạn như https. //www. youtube. com/watch?v=dQw4w9WgXcQ, nhập nó vào trường văn bản và nhấp vào "Rút ngắn URL". Sau đó, bạn sẽ thấy một xác nhận xuất hiện phía trên trường văn bản hiển thị URL mà bạn đã nhập ở bên trái và URL được rút ngắn, có thể nhấp vào ở bên phải

    Nếu bạn nhập một URL đã được rút ngắn hoặc một chuỗi không phải là URL hợp lệ, bạn sẽ thấy lỗi, tương tự như trong ảnh chụp màn hình bên dưới, được hiển thị trong biểu mẫu

    URL được kết nối với PHP như thế nào?

    Bây giờ, hãy thử mở một URL rút ngắn không tồn tại, chẳng hạn như http. //máy chủ cục bộ. 8080/ztgxody2n_/. Bạn sẽ được chuyển hướng đến trang 404, nơi bạn sẽ thấy rằng không tìm thấy URL, như trong ví dụ bên dưới

    URL được kết nối với PHP như thế nào?

    Đó là cách xây dựng công cụ rút ngắn URL của riêng bạn bằng PHP và PostgreSQL

    Mặc dù đây không phải là công cụ rút ngắn URL phức tạp nhất mà bạn có thể tạo, nhưng đây vẫn là một khởi đầu tốt. bạn sẽ cải thiện nó như thế nào?

    Matthew Setter là Trình chỉnh sửa PHP trong nhóm Twilio Voices và là nhà phát triển PHP và Go. Anh ấy cũng là tác giả của Mezzio Essentials và Docker With Docker Compose. Khi anh ấy không viết mã PHP, anh ấy đang chỉnh sửa các bài viết PHP tuyệt vời tại Twilio. Bạn có thể tìm thấy anh ấy tại msetter[at]twilio. com, cũng như trên Twitter và GitHub

    "xích" bởi timlewisnm (được sử dụng trong nền của hình ảnh chính của hướng dẫn) được cấp phép theo CC BY-SA 2. 0

    Đánh giá bài viết này

    1 2 3 4 5

    tác giả

    • URL được kết nối với PHP như thế nào?
      Matthew Setter

    người phản biện

    • URL được kết nối với PHP như thế nào?
      Niels Swimberghe


    bài viết liên quan

    URL được kết nối với PHP như thế nào?

    Laravel Breeze đấu với Laravel Jetstream

    20 Tháng một, 2023

    Trong bài viết này, bạn sẽ được giới thiệu toàn diện về Laravel Breeze và Jetstream, bao gồm cài đặt chúng, thảo luận về sự khác biệt và tương đồng của chúng, và khi nào nên sử dụng chúng

    URL được kết nối với PHP như thế nào?

    Giúp đỡ những người giúp đỡ những người khác

    Ngày 06 tháng 12 năm 2022

    Trong hướng dẫn này, bạn sẽ học cách xây dựng một ứng dụng để giúp mọi người nhanh chóng quyên góp cho các tổ chức từ thiện và phi lợi nhuận bằng Slim Framework, Vue. js và Tailwind CSS

    URL được kết nối với PHP như thế nào?

    Học ngôn ngữ Maasai theo cách thú vị

    Ngày 20 tháng 10 năm 2022

    Trong hướng dẫn này, bạn sẽ xây dựng một ứng dụng giúp bạn học ngôn ngữ Maasai một cách dễ dàng và thú vị với WhatsApp

    URL được kết nối với PHP như thế nào?

    Pub/Sub trong Laravel - Hiểu sâu

    Ngày 20 tháng 10 năm 2022

    Trong hướng dẫn này, bạn sẽ tìm hiểu về Pub/Sub, một mẫu thiết kế phần mềm hướng thông báo và cách triển khai nó trong Laravel

    URL được kết nối với PHP như thế nào?

    Phát triển ứng dụng Symfony bằng Svelte và Webpack Encore để quản lý lịch sử tin nhắn Twilio của bạn

    Ngày 27 tháng 9 năm 2022

    Trong bài viết này, bạn sẽ học cách phát triển ứng dụng với Svelte, Webpack Encore và Symfony có thể tương tác với lịch sử tin nhắn Twilio của bạn

    URL được kết nối với PHP như thế nào?

    Xây dựng trạm thời tiết của riêng bạn với PHP, Python và Raspberry Pi - Phần II

    Ngày 08 tháng 9 năm 2022

    Trong phần thứ hai của loạt bài này, bạn sẽ tìm hiểu cách thêm khả năng gửi thông báo tóm tắt hàng ngày qua cả SMS và email bằng API Twilio và SendGrid cho trạm thời tiết dựa trên Raspberry Pi

    Làm cách nào để lấy URL hiện tại bằng PHP?

    $currentPageUrl = 'http. //'. $_SERVER [ "HTTP_HOST" ]. $_SERVER [ "REQUEST_URI" ]; echo "URL trang hiện tại " .

    Chức năng URL trong PHP là gì?

    PHP. hàm parse_url() . Nó phân tích cú pháp một URL và trả về một mảng kết hợp chứa các thành phần khác nhau của nó. cú pháp. parse_url( $url, $component = -1 )used to return the components of a URL by parsing it. It parses an URL and return an associative array which contains its various components. Syntax: parse_url( $url, $component = -1 )