Centos – Problem beim Laden von gpload-Daten
怪我咯
怪我咯 2017-05-16 13:19:17
0
1
805

数据装载过程中一直报错:
-f my.yml
2017-04-25 16:22:18|INFO| Sitzung gestartet 25.04.2017 16:22:18
25.04.2017 16:22:18|INFO|Schema „öffentlich“ für Tabelle „test“ festlegen
25.04.2017 16:22:18|INFO| gpfdist -p 8000 -P 8001 -f "/home/gpadmin/extend/test2" gestartet. -t 30
2017-04-25 16:22:18||Bei der Verarbeitung der gpload-Steuerdatei ist ein Fehler aufgetreten. Die Konfiguration muss gpload:input:quotefor csv-formatierte Daten enthalten -04-25 16:22:18|INFO|Datenformatierungsfehler = 0
2017-04-25 16:22:18|INFO| gescheitert

my.yml内容:

---

VERSION: 1.0.0.1

DATABASE: ljlj-test

USER: gpadmin

HOST: mdw

PORT: 5432

:

   INPUT:

    - SOURCE:

         LOCAL_HOSTNAME:

           - mdw

         PORT: 8000

         : 

           - /home/gpadmin/extend/test2.

    - COLUMNS:

           - id: int

           - pact_number: varchar(50)

           - grant_type: varchar(50)

           - ticket_usecode: varchar(100)

           - pact_id: int           

    - FORMAT: 

    - DELIMITER: '|'

    - ERROR_LIMIT: 25

    - ERROR_TABLE: test_err

   OUTPUT:

    - TABLE: test

    - MODE: INSERT

test2.内容:

6|102900928|product_conume|4290000100005|0

7|102900929|product_conume|3260000100006|0

的deug模式:
2017-04-25 16:28:30|DEBUG|Konfiguration für Version abrufen
2017-04-25 16:28:30|DEBUG|Version ausprobieren
2017-04-25 16:28:30 |DEBUG|Version gefunden
2017-04-25 16:28:30|INFO| Sitzung gestartet 25.04.2017 16:28:30
25.04.2017 16:28:30|DEBUG|config {u'database': u'ljlj-test', u'host': u'mdw', u'version': u'1.0.0.1', u'user': u'gpadmin', u'': {u'input': [{u'source': {u'local_hostname': [u'mdw' ], u'port': 8000, u'': [u'/home/gpadmin/extend/test2.']}}, {u'columns': [{u'id': u'int'}, { u'pact_number': u'varchar(50)'}, {u'grant_type': u'varchar(50)'}, {u'ticket_usecode': u'varchar(100)'}, {u'pact_id': u'int'}]}, {u'format': u''}, {u'delimiter': u'|'}, {u'error_limit': 25}, {u'error_table': u'test_err' }], u'output': [{u'table': u'test'}, {u'mode': u'INSERT'}]}, u'port': 5432}
25.04.2017 16:28:30|DEBUG|Konfiguration für :output abrufen
25.04.2017 16:28:30|DEBUG|versucht
25.04.2017 16:28:30|DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|Ausgabe versuchen
25.04.2017 16:28:30|DEBUG|Ausgabe gefunden
25.04.2017 16:28:30|DEBUG|Konfiguration für :output abrufen :table
2017-04-25 16:28:30|DEBUG|versucht
2017-04-25 16:28:30|DEBUG|gefunden
2017-04-25 16:28:30|DEBUG|versucht Ausgabe
2017 -04-25 16:28:30|DEBUG|Ausgabe gefunden
2017-04-25 16:28:30|DEBUG|Tabelle ausprobieren
2017-04-25 16:28:30|DEBUG|Tabelle gefunden
2017-04 -25 16:28:30|DEBUG|Konfiguration für Host abrufen
25.04.2017 16:28:30|DEBUG|Host ausprobieren
25.04.2017 16:28:30|DEBUG|Host gefunden
2017-04 -25 16:28:30|DEBUG|Konfiguration für Port abrufen
2017-04-25 16:28:30|DEBUG|Port ausprobieren
2017-04-25 16:28:30|DEBUG|Port gefunden
2017-04 -25 16:28:30|DEBUG|Konfiguration für Benutzer abrufen
25.04.2017 16:28:30|DEBUG|Benutzer wird ausprobiert
25.04.2017 16:28:30|DEBUG|Benutzer gefunden
2017-04 -25 16:28:30|DEBUG|Konfiguration für Datenbank abrufen
2017-04-25 16:28:30|DEBUG|Datenbank ausprobieren
2017-04-25 16:28:30|DEBUG|Datenbank gefunden
2017-04 -25 16:28:30|DEBUG|Konfiguration für Passwort abrufen
2017-04-25 16:28:30|DEBUG|Passwort wird ausprobiert
2017-04-25 16:28:30|DEBUG|Verbindungszeichenfolge: user=gpadmin host=mdw port=5432 Datenbank=ljlj-test
2017-04-25 16:28:30|DEBUG|Erfolgreich mit der Datenbank verbunden
2017-04-25 16:28:30|INFO|Schema „öffentlich“ für Tabelle festlegen 'test'
25.04.2017 16:28:30|DEBUG|Eingabespalte gefunden: [u'"id"', u'integer', None, False]
25.04.2017 16:28:30| DEBUG|Eingabespalte gefunden: [u'"pact_number"', u'character variierend(50)', Keine, Falsch]
25.04.2017 16:28:30|DEBUG|Eingabespalte gefunden: [u'"grant_type "', u'character variierend(50)', Keine, Falsch]
2017-04-25 16:28:30|DEBUG|Eingabespalte gefunden: [u'"ticket_usecode"', u'character variierend(100)' , Keine, Falsch]
25.04.2017 16:28:30|DEBUG|Eingabespalte gefunden: [u'"pact_id"', u'integer', Keine, Falsch]
25.04.2017 16:28: 30|DEBUG|Konfiguration für :input:columns abrufen
25.04.2017 16:28:30|DEBUG|versucht 25.04.2017 16:28:30|DEBUG|gefunden 25.04.2017 16:28 :30|DEBUG|Eingabeversuche
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28:30|DEBUG|Spaltenversuche
25.04.2017 16:28:30 |DEBUG|gefundene Spalten
25.04.2017 16:28:30|DEBUG|von Spalten sind:
25.04.2017 16:28:30|DEBUG|id: int
25.04.2017 16:28: 30|DEBUG|pact_number: varchar(50)
2017-04-25 16:28:30|DEBUG|grant_type: varchar(50)
2017-04-25 16:28:30|DEBUG|ticket_usecode: varchar(100)
25.04.2017 16:28:30|DEBUG|pact_id: int
25.04.2017 16:28:30|DEBUG|Konfiguration für :output:mapping abrufen
25.04.2017 16:28:30| DEBUG|versucht
25.04.2017 16:28:30|DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|Ausgabe versucht
25.04.2017 16:28:30|DEBUG|Ausgabe gefunden
25.04.2017 16:28:30|DEBUG|Mapping wird versucht
25.04.2017 16:28:30|DEBUG|"id": integer = "id"
25.04.2017 16:28:30 |DEBUG|"pact_number": Zeichen variierend(50) = "pakt_nummer"
25.04.2017 16:28:30|DEBUG|"grant_type": Zeichen variierend(50) = "grant_type"
25.04.2017 16:28:30|DEBUG|"ticket_usecode": Zeichen variierend(100) = "ticket_usecode"
25.04.2017 16:28:30|DEBUG|"pact_id": integer = "pact_id"
25.04.2017 16:28:30|DEBUG|Konfiguration für :input abrufen
25.04.2017 16:28:30|DEBUG|versucht
25.04.2017 16:28:30|DEBUG|gefunden
2017 -04-25 16:28:30|DEBUG|Eingabe wird versucht
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28:30|DEBUG|Konfiguration wird abgerufen für :input: Quelle(1)
25.04.2017 16:28:30|DEBUG|versucht
25.04.2017 16:28:30|DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|versucht Eingabe
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28:30|DEBUG|Quelle(1) wird ausprobiert
25.04.2017 16:28:30|DEBUG|gefunden Quelle
25.04.2017 16:28:30|DEBUG|Konfiguration für :input:source(1):local_hostname abrufen
25.04.2017 16:28:30|DEBUG|versucht
25.04.2017 16: 28:30|DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|Eingabeversuch
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28:30 |DEBUG|versuche Quelle(1)
25.04.2017 16:28:30|DEBUG|Quelle gefunden
25.04.2017 16:28:30|DEBUG|versuche lokalen_Hostnamen
25.04.2017 16:28: 30|DEBUG|local_hostname gefunden
25.04.2017 16:28:30|DEBUG|Konfiguration für :input:source:ssl abrufen
25.04.2017 16:28:30|DEBUG|versucht
25.04.2017 16:28:30|DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|Eingabeversuch
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28 :30|DEBUG|versuche Quelle
25.04.2017 16:28:30|DEBUG|Quelle gefunden
25.04.2017 16:28:30|DEBUG|versuche SSL
25.04.2017 16:28:30 |DEBUG|Konfiguration für :input:source:certificates_path abrufen
25.04.2017 16:28:30|DEBUG|versucht 25.04.2017 16:28:30|DEBUG|gefunden 25.04.2017 16: 28:30|DEBUG|Eingabeversuch
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28:30|DEBUG|Quelle ausprobiert
25.04.2017 16:28: 30|DEBUG|Quelle gefunden
25.04.2017 16:28:30|DEBUG|Zertifikatspfad wird ausprobiert
25.04.2017 16:28:30|DEBUG|Konfiguration für :input:source(1):port
2017 abrufen -04-25 16:28:30|DEBUG|versucht
25.04.2017 16:28:30|DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|versucht Eingabe
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28:30|DEBUG|Quelle(1) ausprobiert
25.04.2017 16:28:30|DEBUG|Quelle gefunden
2017-04- 25 16:28:30|DEBUG|Port ausprobieren
25.04.2017 16:28:30|DEBUG|Port gefunden
25.04.2017 16:28:30|DEBUG|Konfiguration für :input:source(1 abrufen ):port_range
2017-04-25 16:28:30|DEBUG|versucht
2017-04-25 16:28:30|DEBUG|gefunden
2017-04-25 16:28:30|DEBUG|versucht Eingabe
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28:30|DEBUG|Quelle(1) wird ausprobiert
25.04.2017 16:28:30|DEBUG|Quelle gefunden
25.04.2017 16:28:30|DEBUG|port_range wird ausprobiert
25.04.2017 16:28:30|DEBUG|Konfiguration abrufen für :input:source(1):
25.04.2017 16:28 :30|DEBUG|versuche
2017-04-25 16:28:30|DEBUG|gefunden
2017-04-25 16:28:30|DEBUG|versuche Eingabe
2017-04-25 16:28:30|DEBUG |Eingabe gefunden
25.04.2017 16:28:30|DEBUG|Quelle(1) ausprobiert
25.04.2017 16:28:30|DEBUG|Quelle gefunden
25.04.2017 16:28:30| DEBUG|versucht
25.04.2017 16:28:30|DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|Konfiguration abrufen für:input:max_line_length
25.04.2017 16:28:30|DEBUG|versucht
25.04.2017 16:28:30|DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|Eingabe wird versucht
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28:30|DEBUG|max_line_length wird versucht
2017 -04-25 16:28:30|DEBUG|Konfiguration für :input:transform abrufen
2017-04-25 16:28:30|DEBUG|versucht
2017-04-25 16:28:30|DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|Eingabe wird versucht
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28:30|DEBUG|Transformation wird versucht
2017- 25.04. 16:28:30|DEBUG|Konfiguration abrufen für :input:transform_config
25.04.2017 16:28:30|DEBUG|versucht
25.04.2017 16:28:30|DEBUG|gefunden
2017 -04-25 16:28:30|DEBUG|versuche Eingabe
2017-04-25 16:28:30|DEBUG|Eingabe gefunden
2017-04-25 16:28:30|DEBUG|versuche transform_config
2017-04 -25 16:28:30|LOG|versucht, gpfdist -p 8000 -P 8001 -f "/home/gpadmin/extend/test2" auszuführen. -t 30 -V
2017-04-25 16:28:30|LOG|gpfdist sagt: 2017-04-25 16:28:30 11767 INFO Vor dem Öffnen von Listening-Sockets – folgende Listening-Sockets sind verfügbar:
2017-04- 25 16:28:30|DEBUG|gpfdist: [msg] libevent using: epoll
2017-04-25 16:28:30|LOG|gpfdist sagt: 25.04.2017 16:28:30 11767 INFO IPV6-Socket: [::]:8000
25.04.2017 16:28:30|DEBUG|gpfdist: 25.04.2017 16:28:30|LOG|gpfdist sagt: 25.04.2017 16:28:30 11767 INFO IPV4-Socket: 0.0.0.0:8000
2017-04-25 16:28:30|LOG|gpfdist sagt: 2017-04-25 16:28:30 11767 INFO Versucht, den Listening-Socket zu öffnen:
2017-04-25 16:28:30|LOG|gpfdist sagt: 25.04.2017 16:28:30 11767 INFO IPV6-Socket: [::]:8000
25.04.2017 16:28:30|LOG|gpfdist sagt: 2017 -04-25 16:28:30 11767 WARN Adresse bereits verwendet (Errno = 98), Port: 8000
2017-04-25 16:28:30|LOG|gpfdist sagt: 2017-04-25 16:28: 30 11767 INFO Versucht, den Listening-Socket zu öffnen:
2017-04-25 16:28:30|LOG|gpfdist sagt: 2017-04-25 16:28:30 11767 INFO IPV4-Socket: 0.0.0.0:8000
2017-04 -25 16:28:30|LOG|gpfdist sagt: 25.04.2017 16:28:30 11767 WARN Adresse bereits verwendet (Errno = 98), Port: 8000
25.04.2017 16:28:30| LOG|gpfdist sagt:
25.04.2017 16:28:30|LOG|gpfdist sagt: 25.04.2017 16:28:30 11767 INFO Vor dem Öffnen von Listening-Sockets sind folgende Listening-Sockets verfügbar:
2017-04- 25 16:28:30|LOG|gpfdist sagt: 25.04.2017 16:28:30 11767 INFO IPV6-Socket: [::]:8001
25.04.2017 16:28:30|LOG|gpfdist sagt: 25.04.2017 16:28:30 11767 INFO IPV4-Socket: 0.0.0.0:8001
25.04.2017 16:28:30|LOG|gpfdist sagt: 25.04.2017 16:28:30 11767 INFO Versuche es um den Listening-Socket zu öffnen:
2017-04-25 16:28:30|LOG|gpfdist sagt: 2017-04-25 16:28:30 11767 INFO IPV6-Socket: [::]:8001
2017-04-25 16 :28:30|LOG|gpfdist sagt: 25.04.2017 16:28:30 11767 INFO Das Öffnen des Listening-Sockets war erfolgreich
25.04.2017 16:28:30|LOG|gpfdist sagt: 25.04.2017 16: 28:30 11767 INFO Versucht, den Listening-Socket zu öffnen:
2017-04-25 16:28:30|LOG|gpfdist sagt: 2017-04-25 16:28:30 11767 INFO IPV4-Socket: 0.0.0.0:8001
25.04.2017 16:28:30|LOG|gpfdist sagt: 25.04.2017 16:28:30 11767 WARN Adresse bereits verwendet (Errno = 98), Port: 8001
25.04.2017 16:28 :30|LOG|gpfdist sagt: HTTP wird auf Port 8001 bereitgestellt, Verzeichnis /home/gpadmin/extend
2017-04-25 16:28:30|INFO|started gpfdist -p 8000 -P 8001 -f "/home/gpadmin /extend/test2.“ -t 30 -V
2017-04-25 16:28:30|LOG|gpfdist läuft auf Port 8001
2017-04-25 16:28:30|DEBUG|ruft die Konfiguration für :input:source:ssl
2017 ab -04-25 16:28:30|DEBUG|versucht
25.04.2017 16:28:30|DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|versucht Eingabe
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28:30|DEBUG|Quelle ausprobieren
25.04.2017 16:28:30|DEBUG|Quelle gefunden
25.04.2017 16: 28:30|DEBUG|versuche SSL
2017-04-25 16:28:30|DEBUG|Konfiguration für :input:source(2) abrufen
2017-04-25 16:28:30|DEBUG|versuche
2017- 25.04. 16:28:30|DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|Eingabeversuch
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28:30|DEBUG|versuche Quelle(2)
2017-04-25 16:28:30|DEBUG|Konfiguration für :preload abrufen
2017-04-25 16:28:30|DEBUG|versuche
2017- 25.04. 16:28:30|DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|Preload wird versucht
25.04.2017 16:28:30|DEBUG|Konfiguration für :output:mode abrufen
25.04.2017 16:28:30|DEBUG|versucht
25.04.2017 16:28:30|DEBUG|gefunden 25.04.2017 16:28:30|DEBUG|Ausgabe wird versucht
2017-04- 25 16:28:30|DEBUG|Ausgabe gefunden
25.04.2017 16:28:30|DEBUG|Versuchsmodus
25.04.2017 16:28:30|DEBUG|Ausgabe gefunden
25.04.2017 16 :28:30|DEBUG|Konfiguration abrufen für:input:error_table
2017-04-25 16:28:30|DEBUG|versucht
2017-04-25 16:28:30|DEBUG|gefunden
2017-04-25 16:28:30|DEBUG|Eingabeversuch
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28:30|DEBUG|Fehlertabelle wird versucht
25.04.2017 16: 28:30|DEBUG|error_table gefunden
25.04.2017 16:28:30|DEBUG|Konfiguration für :input:log_errors abrufen
25.04.2017 16:28:30|DEBUG|versucht
25.04.2017 16:28:30|DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|Eingabeversuch
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28 :30|DEBUG|versuche log_errors
25.04.2017 16:28:30|DEBUG|Konfiguration für :sql abrufen
25.04.2017 16:28:30|DEBUG|versuche
25.04.2017 16:28 :30|DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|versuche SQL
25.04.2017 16:28:30|DEBUG|Konfiguration für :input:format abrufen
25.04.2017 16 :28:30|DEBUG|versuche
25.04.2017 16:28:30|DEBUG|gefunden 25.04.2017 16:28:30|DEBUG|versuche Eingabe
25.04.2017 16:28:30 |DEBUG|Eingabe gefunden
2017-04-25 16:28:30|DEBUG|Format ausprobieren
2017-04-25 16:28:30|DEBUG|Format gefunden
2017-04-25 16:28:30|DEBUG |Konfiguration für :input:delimiter abrufen
2017-04-25 16:28:30|DEBUG|versucht
2017-04-25 16:28:30|DEBUG|gefunden
2017-04-25 16:28:30| DEBUG|versuche Eingabe
2017-04-25 16:28:30|DEBUG|Eingabe gefunden
2017-04-25 16:28:30|DEBUG|versuche Trennzeichen
2017-04-25 16:28:30|DEBUG| Trennzeichen gefunden
25.04.2017 16:28:30|DEBUG|Konfiguration für :input:delimiter abrufen
25.04.2017 16:28:30|DEBUG|ausprobiert 25.04.2017 16:28:30| DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|Eingabeversuch
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28:30|DEBUG|Trennzeichenversuch versucht
2017- 25.04. 16:28:30|DEBUG|Trennzeichen gefunden
25.04.2017 16:28:30|DEBUG|Konfiguration für :input:null_as abrufen
25.04.2017 16:28:30|DEBUG|versucht
25.04.2017 16:28:30|DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|Eingabeversuch
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
2017-04 -25 16:28:30|DEBUG|versuche null_as
25.04.2017 16:28:30|DEBUG|null Falsch
25.04.2017 16:28:30|DEBUG|Konfiguration für :input:escape abrufen
25.04.2017 16:28:30|DEBUG|versucht
25.04.2017 16:28:30|DEBUG|gefunden 25.04.2017 16:28:30|DEBUG|Eingabe wird versucht
2017-04- 25 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28:30|DEBUG|Fluchtversuch
25.04.2017 16:28:30|DEBUG|Konfiguration für :input:quote
2017 abrufen -04-25 16:28:30|DEBUG|versucht
25.04.2017 16:28:30|DEBUG|gefunden
25.04.2017 16:28:30|DEBUG|versucht Eingabe
25.04.2017 16:28:30|DEBUG|Eingabe gefunden
25.04.2017 16:28:30|DEBUG|Zitat wird ausprobiert
25.04.2017 16:28:30||A
25.04.2017 16:28: 30|LOG|gpfdist wird getötet
2017-04-25 16:28:30|DEBUG|gpfdist: 2017-04-25 16:28:30 11767 WARN-Signal 15 empfangen. gpfdist wird beendet
2017-04-25 16:28:30|DEBUG|gpfdist: 2017-04-25 16:28:30 11767 INFO -------------------- -------------------
2017-04-25 16:28:30|DEBUG|gpfdist: 2017-04-25 16:28:30 11767 INFO-STATUS: Gesamt Sitzung(en) 0
25.04.2017 16:28:30|DEBUG|gpfdist: Sitzung: [
25.04.2017 16:28:30|DEBUG|gpfdist: ]
25.04.2017 16:28 :30|DEBUG|gpfdist: 25.04.2017 16:28:30 11767 INFO ------------------------------ --------
25.04.2017 16:28:30|INFO|Zeilen eingefügt = 0
25.04.2017 16:28:30|INFO|Zeilen aktualisiert = 0
25.04.2017 16:28:30|INFO| Formatierungsfehler = 0
25.04.2017 16:28:30|INFO| gescheitert

其中端口8000是gpfdist的端口.

求大神解释下,

 A gpload control file processing error occurred. The configuration must contain gpload:input:quotefor csv formatted data        
      
 
 为什么不匹配,test2.中的分隔符就是'|' 呀!!!!
 
怪我咯
怪我咯

走同样的路,发现不同的人生

Antworte allen(1)
PHPzhong

需要注意两点:
1.gpfdist没有必要手动启动,在执行gpload的时候会自动启动gpfdist,还有在yml中之配置了一个8000的端口,但是在执行的时候会出现8001端口(命令执行完毕后,gpfdist会自动杀死)
2.yml中缺少对quote的设置: - QUOTE: ''''

以上两点就可以解决上面的问题.

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!