Using the millis() function with button

int led=4;

What does this mean? ledPin means something.

    delay(5000);
    digitalWrite(led,LOW);
 unsigned long currentMillis = millis();

delay() and millis() rarely belong in the same code. currentMillis is a stupid name. The variable holds the time that some event happened. The name of the variable should reflect that event. In this case, now is a MUCH more appropriate name.

You MUST determine when the switch BECOMES pressed, NOT when the switch IS pressed. THAT is the event that is important.