@@ -85,64 +85,67 @@ func Install(args []string) {
85
85
}
86
86
87
87
// check if .pvm folder exists
88
- if _ , err := os .Stat (homeDir + "/.pvm" ); os .IsNotExist (err ) {
88
+ pvmPath := filepath .Join (homeDir , ".pvm" )
89
+ if _ , err := os .Stat (pvmPath ); os .IsNotExist (err ) {
89
90
theme .Info ("Creating .pvm folder in home directory" )
90
- os .Mkdir (homeDir + "/.pvm" , 0755 )
91
+ os .Mkdir (pvmPath , 0755 )
91
92
}
92
93
93
94
// check if .pvm/versions folder exists
94
- if _ , err := os .Stat (homeDir + "/.pvm/versions" ); os .IsNotExist (err ) {
95
+ versionsPath := filepath .Join (pvmPath , "versions" )
96
+ if _ , err := os .Stat (versionsPath ); os .IsNotExist (err ) {
95
97
theme .Info ("Creating .pvm/versions folder in home directory" )
96
- os .Mkdir (homeDir + "/.pvm/versions" , 0755 )
98
+ os .Mkdir (versionsPath , 0755 )
97
99
}
98
100
99
101
theme .Info ("Downloading" )
100
102
101
- // Get the data
102
- downloadResponse , err := http .Get ("https://windows.php.net" + desiredVersion .Url )
103
- if err != nil {
104
- log .Fatalln (err )
105
- }
106
-
107
- defer downloadResponse .Body .Close ()
108
-
109
103
// zip filename from url
104
+ zipUrl := "https://windows.php.net" + desiredVersion .Url
110
105
zipFileName := strings .Split (desiredVersion .Url , "/" )[len (strings .Split (desiredVersion .Url , "/" ))- 1 ]
106
+ zipPath := filepath .Join (versionsPath , zipFileName )
111
107
112
108
// check if zip already exists
113
- if _ , err := os .Stat (homeDir + "/.pvm/versions/" + zipFileName ); err == nil {
109
+ if _ , err := os .Stat (zipPath ); err == nil {
114
110
theme .Error (fmt .Sprintf ("PHP %s already exists" , desiredVersion ))
115
111
return
116
112
}
117
113
118
- // Create the file
119
- out , err := os .Create (homeDir + "/.pvm/versions/" + zipFileName )
120
- if err != nil {
121
- log .Fatalln (err )
122
- }
123
-
124
- // Write the body to file
125
- _ , err = io .Copy (out , downloadResponse .Body )
126
-
127
- if err != nil {
128
- out .Close ()
129
- log .Fatalln (err )
114
+ // Get the data
115
+ if _ , err := downloadFile (zipUrl , zipPath ); err != nil {
116
+ log .Fatalf ("Error while downloading PHP from %v: %v!" , zipUrl , err )
130
117
}
131
118
132
- // Close the file
133
- out .Close ()
134
-
135
119
// extract the zip file to a folder
120
+ phpFolder := strings .Replace (zipFileName , ".zip" , "" , - 1 )
121
+ phpPath := filepath .Join (versionsPath , phpFolder )
136
122
theme .Info ("Unzipping" )
137
- Unzip (homeDir + "/.pvm/versions/" + zipFileName , homeDir + "/.pvm/versions/" + strings . Replace ( zipFileName , ".zip" , "" , - 1 ) )
123
+ Unzip (zipPath , phpPath )
138
124
139
125
// remove the zip file
140
126
theme .Info ("Cleaning up" )
141
- err = os .Remove (homeDir + "/.pvm/versions/" + zipFileName )
127
+ err = os .Remove (zipPath )
142
128
if err != nil {
143
129
log .Fatalln (err )
144
130
}
145
131
132
+ // install composer
133
+ composerFolderPath := filepath .Join (phpPath , "composer" )
134
+ if _ , err := os .Stat (composerFolderPath ); os .IsNotExist (err ) {
135
+ theme .Info ("Creating composer folder" )
136
+ os .Mkdir (composerFolderPath , 0755 )
137
+ }
138
+
139
+ composerPath := filepath .Join (composerFolderPath , "composer.phar" )
140
+ composerUrl := "https://getcomposer.org/download/latest-stable/composer.phar"
141
+ if desiredVersion .LessThan (common.Version {Major : 7 , Minor : 2 }) {
142
+ composerUrl = "https://getcomposer.org/download/latest-2.2.x/composer.phar"
143
+ }
144
+
145
+ if _ , err := downloadFile (composerUrl , composerPath ); err != nil {
146
+ log .Fatalf ("Error while downloading Composer from %v: %v!" , composerUrl , err )
147
+ }
148
+
146
149
theme .Success (fmt .Sprintf ("Finished installing PHP %s" , desiredVersion ))
147
150
}
148
151
@@ -258,3 +261,30 @@ func FindLatestMinor(versions []common.Version, major int, threadSafe bool) comm
258
261
259
262
return latestMinor
260
263
}
264
+
265
+ func downloadFile (fileUrl string , filePath string ) (bool , error ) {
266
+ downloadResponse , err := http .Get (fileUrl )
267
+ if err != nil {
268
+ return false , err
269
+ }
270
+
271
+ defer downloadResponse .Body .Close ()
272
+
273
+ // Create the file
274
+ out , err := os .Create (filePath )
275
+ if err != nil {
276
+ return false , err
277
+ }
278
+
279
+ // Write the body to file
280
+ _ , err = io .Copy (out , downloadResponse .Body )
281
+
282
+ if err != nil {
283
+ out .Close ()
284
+ return false , err
285
+ }
286
+
287
+ // Close the file
288
+ out .Close ()
289
+ return true , nil
290
+ }
0 commit comments